package com.ruoyi.member.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.member.domain.MemberCard;
import com.ruoyi.member.domain.MemberOrder;
import com.ruoyi.member.domain.MemberRights;
import com.ruoyi.member.vo.MemberRightsVO;
import com.ruoyi.member.vo.ViewRightsVO;

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

/**
 * 会员开卡记录Service接口
 *
 * @author pqz
 * @date 2025-03-17
 */
public interface IMemberCardService extends IService<MemberCard> {

    /**
     * 通过用户id查询会员开卡记录
     *
     * @param userId 用户id
     * @return java.util.List<com.ruoyi.member.domain.MemberCard>
     * @author PQZ
     * @date 14:24 2025/3/21
     **/
    List<MemberCard> listByUserId(Long userId, String userType);

    /**
     * 会员开卡处理
     *
     * @param userId   用户id
     * @param userType 用户类型
     * @param cardId   卡id
     * @param cycle    时间
     * @param orderId  订单id
     * @author PQZ
     * @date 18:06 2025/3/31
     **/
    void dealMemberCard(Long userId, String userType, String cardId, String cycle, String orderId);

    /**
     * 查当前会员权益列表
     *
     * @param userType 用户类型
     * @param userId   用户id
     * @author vinjor-M
     * @date 11:26 2025/3/26
     **/
    Map<String, Map<String, ViewRightsVO>> selectMemberRights(Long userId, String userType);

    /**
     * 获取报名次数
     *
     * @param userId   用户id
     * @param userType 类型
     * @return java.lang.Integer
     * @author PQZ
     * @date 17:27 2025/3/31
     **/
    Integer getCardRightsValue(Long userId, String userType,String rightsCode);


    /**
     *
     * @author PQZ
     * @date 14:23 2025/4/17
     * @param userId 用户id
     * @param noticeId 通告id
     * @param rightsCode 权益编码
     * @param deplete 扣的值
     **/
    void dealMemberRights(Long userId,String noticeId,String rightsCode,Integer deplete) throws Exception;
    void dealMemberRights2(Long userId,String noticeId,String rightsCode,Integer deplete) throws Exception;
    /**
     *  查某用户某身份类型的会员卡到期时间，如果没有开通会员，那么返回null
     *
     * @author vinjor-M
     * @date 14:10 2025/4/25
     * @param userId 用户id
     * @param userType 身份类型
     * @return java.lang.String
    **/
    MemberCard getUserCardEndDate(Long userId,String userType);

}
