package com.hai.service;

import com.alibaba.fastjson.JSONObject;
import com.hai.entity.HighDiscountPackage;
import com.hai.entity.HighDiscountPackageActual;
import com.hai.entity.HighDiscountPackageRecord;
import com.hai.entity.HighUser;
import com.hai.model.UserInfoModel;

import java.util.List;
import java.util.Map;

/**
 * @serviceName HighCouponPackageService.java
 * @author Sum1Dream
 * @version 1.0.0
 * @Description // 优惠券包接口服务
 * @createTime 11:31 上午 2021/11/25
 **/
public interface HighDiscountPackageService {

    /**
    * @Author Sum1Dream
    * @name getCouponPackageList.java
    * @Description // 获取优惠券包列表
    * @Date 11:34 上午 2021/11/25
    * @Param [java.util.Map<java.lang.String,java.lang.Object>]
    * @return java.util.List<com.hai.entity.HighCouponPackage>
    */
    List<HighDiscountPackage> getDiscountPackageList(Map<String , Object> map);

    /**
    * @Author Sum1Dream
    * @name findCouponPackageById.java
    * @Description //
    * @Date 11:35 上午 2021/11/25
    * @Param [java.lang.Integer]
    * @return com.hai.entity.HighCouponPackage
    */
    HighDiscountPackage findDiscountPackageById(Integer id);

    /**
    * @Author Sum1Dream
    * @name getCallExclusive.java
    * @Description // 查询优惠券包专属
    * @Date 4:02 下午 2021/11/30
    * @Param [java.lang.Integer]
    * @return com.hai.entity.HighDiscountPackage
    */
    HighDiscountPackage getCallExclusive(Integer usingAttribution , Integer companyId);

    /**
    * @Author Sum1Dream
    * @name insertCouponPackage.java
    * @Description // 新增优惠券包信息
    * @Date 12:07 下午 2021/11/25
    * @Param [com.hai.entity.HighCouponPackage]
    * @return void
    */
    void insertDiscountPackage(HighDiscountPackage highDiscountPackage);

    /**
    * @Author Sum1Dream
    * @name updateCouponPackage.java
    * @Description // 新增优惠券包信息
    * @Date 12:07 下午 2021/11/25
    * @Param [com.hai.entity.HighCouponPackage]
    * @return void
    */
    void updateDiscountPackage(HighDiscountPackage highDiscountPackage);

    /**
    * @Author Sum1Dream
    * @name getDiscountPackageRecordList.java
    * @Description // 查询优惠券包赠送记录
    * @Date 4:41 下午 2021/12/1
    * @Param [java.util.Map<java.lang.String,java.lang.Object>]
    * @return java.util.List<com.hai.entity.HighDiscountPackageRecord>
    */
    List<HighDiscountPackageRecord> getDiscountPackageRecordList(Map<String , Object> map);

    /**
    * @Author Sum1Dream
    * @name addDiscountPackageStock.java
    * @Description // 新增优惠券包库存
    * @Date 11:32 上午 2021/12/7
    * @Param [com.hai.entity.HighDiscountPackage]
    * @return void
    */
    void addDiscountPackageStock(HighDiscountPackage highDiscountPackage, UserInfoModel userInfoModel , Integer num) throws Exception;

    /**
     * @Author Sum1Dream
     * @name freeUserDiscountPackage.java
     * @Description // 赠送用户优惠券包内容
     * @Date 3:09 下午 2021/12/24
     * @Param [java.lang.Long]
     * @return void
     */
    HighDiscountPackageActual freeUserDiscountPackage(Map<String , Object> map) throws Exception;

    /**
     * 赠送优惠券包
     * @param packageId
     * @param phoneList
     */
    String giveAway(Long packageId, List<String> phoneList) throws Exception;

    /**
     * @Author Sum1Dream
     * @Name giveAway
     * @Description // 单个手机号赠送优惠券包
     * @Date 20:01 2023/6/5
     * @Param [packageId, phone, sourceType, sourceId]
     * @Return java.lang.String
     */
    void giveAway(Long packageId, String phone , Integer sourceType , String sourceId) throws Exception;

    /**
    * @Author Sum1Dream
    * @Name receivePackage
    * @Description // 领取券包
    * @Date 18:23 2023/12/12
    * @Param object
     * @return void
    */
    void receivePackage(JSONObject object, HighUser user );

    void decodeCode(String code , HighUser highUser);

}