package com.czg.market.service;

import com.czg.market.dto.MkCouponGiftDTO;
import com.czg.market.entity.MkCouponGift;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;

import java.util.List;

/**
 * 券赠送关联表 服务层。
 *
 * @author ww
 * @since 2025-09-12
 */
public interface MkCouponGiftService extends IService<MkCouponGift> {

    /**
     * 券关联表查询
     */
    Page<MkCouponGiftDTO> getCouponGiftPage(Long couponId, Integer type);

    /**
     * 根据sourceId查询关联券
     *
     * @param sourceId 来源Id
     * @param type     类型 1 会员开通赠券 2 会员周活动 3 消费赠券
     */
    List<MkCouponGiftDTO> getCouponGiftBySourceId(Long sourceId, Integer type);

    /**
     * 新增关联券
     *
     * @param sourceId   来源ID
     * @param type       类型 1 会员开通赠券 2 会员周活动 3 消费赠券
     * @param couponGiftList 券ID 如果是子店铺 则使用主店铺的券ID-数量
     */
    void addCouponGift(Long sourceId, String sourceName, Integer type, List<MkCouponGiftDTO> couponGiftList);


    /**
     * 更新关联券
     *
     * @param sourceId   来源ID
     * @param type       类型 1 会员开通赠券 2 会员周活动 3 消费赠券
     * @param couponGiftList 券ID 如果是子店铺 则使用主店铺的券ID和数量必填
     */
    void upCouponGift(Long sourceId, String sourceName, Integer type, List<MkCouponGiftDTO> couponGiftList);

    /**
     * 通过关联Id取消该关联关系
     */
    void cancelGift(Long id);


    /**
     * 删除关联券
     *
     * @param sourceId 来源ID
     * @param type     类型 1 会员开通赠券 2 会员周活动 3 消费赠券
     */
    void deleteJoinCouponGift(Long sourceId, Integer type);

    /**
     * 通过券删除关联
     *
     * @param couponId 券ID
     */
    void deleteCoupon(Long couponId);

    /**
     * 更新券名称
     *
     * @param couponId 券ID
     * @param couponName 券名称
     */
    void upCouponName(Long couponId, String couponName);
}
