package com.starry.admin.modules.shop.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity;
import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsQueryVo;
import com.starry.admin.modules.shop.module.vo.PlayCouponDetailsReturnVo;
import java.util.List;

/**
 * 优惠券详情Service接口
 *
 * @author admin
 * @since 2024-07-04
 */
public interface IPlayCouponDetailsService extends IService<PlayCouponDetailsEntity> {
    /**
     * 查询优惠券详情
     *
     * @param id
     *            优惠券详情主键
     * @return 优惠券详情
     */
    PlayCouponDetailsReturnVo selectPlayCouponDetailsById(String id);

    /**
     * 查询优惠券详情列表
     *
     * @param vo
     *            优惠券详情
     * @return 优惠券详情集合
     */
    IPage<PlayCouponDetailsReturnVo> selectByPage(PlayCouponDetailsQueryVo vo);

    /**
     * 查询优惠券详情列表
     *
     * @param playCouponDetails
     *            优惠券详情
     * @return 优惠券详情集合
     */
    IPage<PlayCouponDetailsEntity> selectPlayCouponDetailsByPage(PlayCouponDetailsEntity playCouponDetails);

    /**
     * 根据顾客ID，查询当前顾客优惠券列表
     *
     * @param customId
     *            顾客ID
     * @return List<com.starry.admin.modules.shop.module.entity.PlayCouponDetailsEntity>
     * @author admin
     * @since 2024/7/5 11:37
     **/
    List<PlayCouponDetailsReturnVo> selectByCustomId(String customId);

    /**
     * 新建优惠券使用详情
     *
     * @param customId
     *            用户ID
     * @param customNickName
     *            用户昵称
     * @param customLevel
     *            用户等级
     * @param couponId
     *            优惠券ID
     * @param obtainingChannels
     *            获得渠道（1:自主领取;2:后台发放;3:退款返还;4:分享领取;5:抽奖获得）
     * @param useState
     *            优惠券使用状态(1:未使用;2:已使用;3:已回收)
     * @author admin
     * @since 2024/7/8 16:21
     **/
    void create(String customId, String customNickName, String customLevel, String couponId, String obtainingChannels,
            String useState);

    /**
     * 新增优惠券详情
     *
     * @param playCouponDetails
     *            优惠券详情
     * @return 结果
     */
    boolean create(PlayCouponDetailsEntity playCouponDetails);

    /**
     * 统计指定用户的有效优惠券数量（排除已回收）。
     */
    long countActiveByCustomAndCoupon(String couponId, String customId);

    /**
     * 修改优惠券详情
     *
     * @param playCouponDetails
     *            优惠券详情
     * @return 结果
     */
    boolean update(PlayCouponDetailsEntity playCouponDetails);

    /**
     * 批量修改优惠券使用状态 优惠券使用状态(1:未使用;2:已使用;3:已回收)
     *
     * @param ids
     *            需要删除的优惠券详情主键集合
     * @param useState
     *            优惠券使用状态(1 : 未使用 ; 2 : 已使用 ; 3 : 已回收)
     */
    void updateCouponUseStateByIds(List<String> ids, String useState);

    /**
     * 批量删除优惠券详情
     *
     * @param ids
     *            需要删除的优惠券详情主键集合
     * @return 结果
     */
    int deletePlayCouponDetailsByIds(String[] ids);

    /**
     * 删除优惠券详情信息
     *
     * @param id
     *            优惠券详情主键
     * @return 结果
     */
    int deletePlayCouponDetailsById(String id);
}
