package com.ruoyi.school.member.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.page.RespPage;
import com.ruoyi.core.api.APIResponse;
import com.ruoyi.school.member.domain.ScMemberCard;
import com.ruoyi.school.member.domain.req.CreateMemberCardDTO;
import com.ruoyi.school.member.domain.resp.MemberCardDTO;
import com.ruoyi.school.member.domain.resp.MemberCardVO;

import java.util.List;

/**
 * 会员卡服务接口
 */
public interface IScMemberCardService extends IService<ScMemberCard> {

    /**
     * 创建会员卡
     */
    MemberCardDTO createMemberCard(CreateMemberCardDTO dto);

    /**
     * 根据ID查询会员卡详情
     */
    MemberCardVO getCardById(Long cardId);

    /**
     * 根据卡号查询会员卡
     */
    MemberCardVO getByCardNo(String cardNo);

    //批量签到
    APIResponse checkInByIds(List<Long> bookIds);

    /**
     * 激活会员卡
     */
    boolean activateCard(Long cardId);

    /**
     * 冻结会员卡
     */
    boolean suspendCard(Long cardId);

    /**
     * 续费会员卡
     */
    boolean renewCard(Long cardId, Integer days);

    /**
     * 添加次数
     */
    boolean addCardCount(Long cardId, Integer count);

    /**
     * 扣减次数
     */
    boolean deductCardCount(Long cardId, Integer count);

    /**
     * 查询会员的会员卡列表
     */
    List<MemberCardVO> getMemberCards(Long memberId);

    /**
     * 分页查询会员卡列表
     */
    RespPage<MemberCardVO> getCardList(MemberCardDTO queryDTO);

    /**
     * 查询有效的会员卡
     */
    List<MemberCardVO> getValidMemberCards(Long memberId);

    /**
     * 检查会员卡状态
     */
    boolean checkCardStatus(Long cardId);

    /**
     * 批量更新过期状态
     */
    int expiredMemberCard();

    /**
     * 获取今日办理的会员卡数量
     */
    Integer getTodayCardCount();
}
