package com.ruoyi.dz.service;

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

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.enums.ExamType;
import com.ruoyi.dz.domain.DzCards;
import com.ruoyi.dz.domain.DzCardsOpen;
import com.ruoyi.enums.CardAction;
import com.ruoyi.enums.CardType;

/**
 * 学习卡Service接口
 *
 * @author ruoyi
 * @date 2025-09-12
 */
public interface IDzCardsService
{
    /**
     * 查询学习卡
     *
     * @param cardId 学习卡主键
     * @return 学习卡
     */
    public DzCards selectDzCardsByCardId(Long cardId);

    public DzCards selectDzCardsByCardNo(String cardNo);

    public DzCards selectOneECard();

    /**
     * 查询学习卡列表
     *
     * @param dzCards 学习卡
     * @return 学习卡集合
     */
    public List<DzCards> selectDzCardsList(DzCards dzCards);
    public List<DzCards> selectDzCardsList2(DzCards dzCards);
    public List<com.ruoyi.dz.dto.CardStudentDTO> selectDzCardsList3(DzCards dzCards);

    /**
     * 新增学习卡
     *
     * @param dzCards 学习卡
     * @return 结果
     */
    public int insertDzCards(DzCards dzCards);

    /**
     * 修改学习卡
     *
     * @param dzCards 学习卡
     * @return 结果
     */
    public int updateDzCards(DzCards dzCards);

    /**
     * 批量删除学习卡
     *
     * @param cardIds 需要删除的学习卡主键集合
     * @return 结果
     */
    public int deleteDzCardsByCardIds(Long[] cardIds);

    /**
     * 删除学习卡信息
     *
     * @param cardId 学习卡主键
     * @return 结果
     */
    public int deleteDzCardsByCardId(Long cardId);

    /**
     * 制卡
     * @param deptId
     * @param type
     * @param count
     */
    public void issueCard(Long deptId, CardType type, Integer count);

    /**
     * 分配卡
     * @param agentId
     * @param leafAgentId
     * @param cardType
     * @param beginNo
     * @param endNo
     */
    public void assignCard(Long deptId, Long agentId, Long leafAgentId, CardType cardType, String beginNo, String endNo, String location, ExamType examType, Long schoolId, Integer days);

    /**
     * 开卡
     * @param agentId
     * @param location
     * @param schoolId
     * @param beginNo
     * @param endNo
     * @return
     */
    public Boolean openCard(Long agentId, String location, Long schoolId, String beginNo, String endNo, Integer days);

    /**
     * 申请开卡
     * @param dzCardsOpen
     */
    public Boolean requestOpenCard(DzCardsOpen dzCardsOpen);

    /**
     * 审核开卡
     * @param dzCardsOpen
     * @param sysUser
     */
    public Boolean confirmOpenCard(DzCardsOpen dzCardsOpen, SysUser sysUser);

    /**
     * 修改卡
     * @param action
     * @param cardIds
     */
    public void changeCard(CardAction action, Long[] cardIds,Integer days);

    /**
     * 分配校区
     * @param campusId
     * @param campusClassId
     * @param beginNo
     * @param endNo
     * @return
     */
    public Boolean changeCampus(Long campusId, Long campusClassId, String beginNo, String endNo);

    /**
     * 通过卡片ID列表分配校区
     * @param campusId
     * @param campusClassId
     * @param cardIds
     * @return
     */
    public Boolean changeCampusByCardIds(Long campusId, Long campusClassId, Long[] cardIds);

    public List<DzCards> selectCardsByCardIds(List<Long> cardIds);

    /**
     * 统计学习卡数据
     *
     * @param params 查询参数（deptId, agentId, openTimeBegin, openTimeEnd）
     * @return 统计结果列表
     */
    public List<com.ruoyi.dz.dto.CardStatisticsDTO> statisticCards(Map<String, Object> params);
}
