package com.hzs.activity.base.service;

import com.hzs.activity.base.param.ActivityParam;
import com.hzs.activity.base.param.QueryActivityParam;
import com.hzs.activity.base.vo.BaseConfigVo;
import com.hzs.activity.recommend.param.AcRecommendParam;
import com.hzs.common.domain.activity.base.AcBaseConfig;
import com.hzs.common.domain.member.base.CuMember;
import com.hzs.common.domain.sale.ext.BdWaresDetailExt;
import com.hzs.common.domain.sale.ext.SaOrderExt;
import com.hzs.system.sys.dto.ApprovalBusinessResultDTO;

import java.util.List;

public interface IActivityService {

    /**
     * 新增活动配置
     *
     * @return
     */
    Long saveActivity(ActivityParam activityParam);

    /**
     * 新增消费赠送规格
     *
     * @param activityParam
     */
    Long saveConsumptionGift(ActivityParam activityParam);

    /**
     * 新增抽奖活动配置
     *
     * @param activityParam
     */
    void saveRaffleActivity(ActivityParam activityParam);

    /**
     * 保存基础配置
     *
     * @param activityParam 入参
     * @return AcBaseConfig
     */
    AcBaseConfig saveBaseConfig(ActivityParam activityParam);

    /**
     * @param activityParam 入参
     * @param baseConfig    基础配置
     */
    Boolean saveGoalMemberConfig(ActivityParam activityParam, AcBaseConfig baseConfig);

    /**
     * 商品买赠配置 新增
     *
     * @param activityParam
     * @param baseConfig
     */
    void saveWaresRuleConfig(ActivityParam activityParam, AcBaseConfig baseConfig);

    /**
     * 处理活动
     */
    Boolean handleActivity(SaOrderExt saOrderExt);

    AcBaseConfig updateRaffleActivity(ActivityParam activityParam);

    /**
     * 查询活动数据列表
     *
     * @param queryActivityParam
     * @return
     */
    List<BaseConfigVo> activityList(QueryActivityParam queryActivityParam);

    /**
     * 活动日志基本信息拼装
     *
     * @param activityParam 活动基本信息
     * @param str           拼接字符
     * @param pkBaseId      活动主键
     * @param businessType  类型
     * @param freeSignFlag  是否需要签呈
     * @return
     */
    StringBuffer createBaseConfigLog(ActivityParam activityParam, StringBuffer str, Long pkBaseId, Integer businessType, Boolean freeSignFlag);

    /**
     * 删除活动日志基本信息拼装
     *
     * @param baseConfig   活动基本信息
     * @param str          拼接字符
     * @param pkBaseId     活动主键
     * @param businessType 类型
     * @param freeSignFlag 是否需要签呈
     * @return
     */
    StringBuffer removeBaseConfigLog(AcBaseConfig baseConfig, StringBuffer str, Long pkBaseId, Integer businessType, Boolean freeSignFlag);

    /**
     * 修改消费赠送规格
     *
     * @param activityParam
     */
    void updateConsumptionGift(ActivityParam activityParam);

    /**
     * 审批签呈
     *
     * @param recommendParam
     * @return
     */
    Boolean onLinePetition(AcRecommendParam recommendParam);

    /**
     * 活动签呈审核通过
     *
     * @param approvalBusinessResultDTO
     * @return
     */
    String approvalAgree(ApprovalBusinessResultDTO approvalBusinessResultDTO);

    /**
     * 活动赠送，商品买赠，订单业绩买赠
     */
    List<BdWaresDetailExt> generateActivityGiftWaresAchieve(Integer specialArea, Integer pkCountry, List<BdWaresDetailExt> bdWaresDetailExtList,
                                                            String parentCode, CuMember cuMember);

}
