package com.hfkj.service.discount;

import com.hfkj.entity.BsDiscountUser;
import com.hfkj.model.DiscountUserModel;
import com.hfkj.model.ReceiveDiscountPkModel;
import com.hfkj.sysenum.discount.DiscountStockCodeObtainTypeEnum;

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

/**
 * @className: BsDiscountUserService
 * @author: HuRui
 * @date: 2024/8/29
 **/
public interface BsDiscountUserService {

    /**
     * 编辑数据
     * @param data
     */
    void editData(BsDiscountUser data);

    /**
     * 领取优惠券
     * @param discountNo  优惠券编号
     * @param number      领取数量
     * @param obtainType  获得方式
     * @param userPhone   用户电话
     */
    List<BsDiscountUser> receive(String discountNo, Integer number, DiscountStockCodeObtainTypeEnum obtainType, String userPhone, String agentAppid);

    /**
     * 领取优惠券包
     * @param discountPkNo
     * @param number
     * @param obtainType
     * @param userPhone
     * @param agentAppid
     * @return
     */
    List<ReceiveDiscountPkModel> receivePk(String discountPkNo, Integer number, DiscountStockCodeObtainTypeEnum obtainType, String userPhone, String agentAppid);

    /**
     * 使用优惠券
     * @param id
     */
    BsDiscountUser userDiscount(Long id);

    /**
     * 退还优惠券
     * @param id
     * @return
     */
    BsDiscountUser revokeUserDiscount(Long id);

    /**
     * 查询详情
     * @param id
     * @return
     */
    BsDiscountUser getDetail(Long id);

    /**
     * 转增他人
     * @param codeId 用户优惠券codeId
     * @param giveUserId 转增用户id
     * @param phone  接收用户手机号
     */
    void give(Long codeId,Long giveUserId,String phone);

    /**
     * 查询详情
     * @param stockCodeId
     * @return
     */
    BsDiscountUser getDetailByCodeId(Long stockCodeId);

    /**
     * 查询详情根据用户手机号和库存id
     * @param phone
     * @param stockCodeId
     * @return
     */
    BsDiscountUser getDetailByUserCodeId(String phone,Long stockCodeId);

    /**
     * 用户优惠券列表
     * @param param
     * @return
     */
    List<DiscountUserModel> getUserDiscountList(Map<String,Object> param);

    /**
     * 过期
     */
    void expiration();
}
