package cn.iocoder.yudao.module.custom.service;

import cn.iocoder.yudao.module.custom.entity.CustomerBalanceChange;
import cn.iocoder.yudao.module.custom.vo.CustomerBalanceChangePageReqVO;
import cn.iocoder.yudao.module.custom.vo.CustomerBalanceChangeRespVO;
import cn.iocoder.yudao.module.member.entity.MemberCoupon;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;

/**
 * 用户积分（余额）、卡券变动记录 Service 接口
 *
 * @author pqz
 */
public interface CustomerBalanceChangeService extends IService<CustomerBalanceChange> {

    /**
     * @param cusId         客户id
     * @param userId        用户id
     * @param couponId      关联卡券id
     * @param changeType    变动类型
     * @param changeMain    变动主体
     * @param changeRule    变动规则
     * @param changeBalance 变动积分/次数
     * @param remBalance    变动后剩余积分/次数
     * @param reason        变动原因
     * @author PQZ
     * @date 21:54 2024/9/20
     **/
    void saveChange(String cusId, Long userId, String couponId, String changeType, String changeMain, String changeRule, BigDecimal changeBalance, BigDecimal remBalance, String reason);

    /**
     * 初始化变动记录
     *
     * @param cusId         客户id
     * @param userId        用户id
     * @param couponId      关联卡券id
     * @param changeType    变动类型
     * @param changeMain    变动主体
     * @param changeRule    变动规则
     * @param changeBalance 变动积分/次数
     * @param remBalance    变动后剩余积分/次数
     * @param reason        变动原因
     * @return cn.iocoder.yudao.module.custom.entity.CustomerBalanceChange
     * @author PQZ
     * @date 10:09 2024/9/21
     **/
    CustomerBalanceChange initChange(String cusId, Long userId, String couponId, String changeType, String changeMain, String changeRule, BigDecimal changeBalance, BigDecimal remBalance, String reason);

    /**
     * 获得用户积分（余额）、卡券变动记录分页
     *
     * @param pageReqVO 分页查询
     * @return 用户积分（余额）、卡券变动记录分页
     */
    IPage<CustomerBalanceChangeRespVO> queryListPage(CustomerBalanceChangePageReqVO pageReqVO, Page<CustomerBalanceChangeRespVO> page);


    /**
     * 转换变动记录
     *
     * @param cusId      客户id
     * @param userId     用户id
     * @param activeName 活动名称
     * @param couponList 卡券集合
     * @return java.util.List<cn.iocoder.yudao.module.custom.entity.CustomerBalanceChange>
     * @author PQZ
     * @date 21:58 2024/9/24
     **/
    List<CustomerBalanceChange> transChange(String cusId, Long userId, String activeName, List<MemberCoupon> couponList);

    /**
     * 通过用户id和卡券id查询积分、卡券的变动记录
     *
     * @param cusId    用户id
     * @param couponId 卡券id
     * @return java.util.List<cn.iocoder.yudao.module.custom.entity.CustomerBalanceChange>
     * @author PQZ
     * @date 22:48 2024/9/20
     **/
    List<CustomerBalanceChange> getCouponChange(String cusId, String couponId);

}