package com.sundot.airport.system.mapper.approval;

import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sundot.airport.system.domain.approval.ApprovalCc;
import com.sundot.airport.system.domain.approval.dto.ApprovalCcDetailDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 审批抄送Mapper接口
 *
 * @author simon lin
 * @date 2025-09-06
 */
@Mapper
public interface ApprovalCcMapper extends BaseMapper<ApprovalCc> {
    /**
     * 查询审批抄送
     *
     * @param id 审批抄送主键
     * @return 审批抄送
     */
    ApprovalCc selectApprovalCcById(Long id);

    /**
     * 根据实例ID查询审批抄送列表
     *
     * @param instanceId 实例ID
     * @return 审批抄送列表
     */
    List<ApprovalCc> selectApprovalCcByInstanceId(@Param("instanceId") Long instanceId);

    /**
     * 根据抄送用户ID查询审批抄送列表
     *
     * @param ccUserId 抄送用户ID
     * @param isRead   是否已读
     * @return 审批抄送列表
     */
    List<ApprovalCc> selectApprovalCcByCcUser(@Param("ccUserId") Long ccUserId, @Param("isRead") String isRead);

    /**
     * 查询审批抄送列表
     *
     * @param approvalCc 审批抄送
     * @return 审批抄送集合
     */
    List<ApprovalCc> selectApprovalCcList(ApprovalCc approvalCc);

    /**
     * 新增审批抄送
     *
     * @param approvalCc 审批抄送
     * @return 结果
     */
    int insertApprovalCc(ApprovalCc approvalCc);

    /**
     * 修改审批抄送
     *
     * @param approvalCc 审批抄送
     * @return 结果
     */
    int updateApprovalCc(ApprovalCc approvalCc);

    /**
     * 删除审批抄送
     *
     * @param id 审批抄送主键
     * @return 结果
     */
    int deleteApprovalCcById(Long id);

    /**
     * 批量删除审批抄送
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteApprovalCcByIds(Long[] ids);

    /**
     * 根据实例ID删除审批抄送
     *
     * @param instanceId 实例ID
     * @return 结果
     */
    int deleteApprovalCcByInstanceId(@Param("instanceId") Long instanceId);

    /**
     * 统计用户抄送消息数量
     *
     * @param ccUserId 抄送用户ID
     * @param isRead   是否已读
     * @return 抄送消息数量
     */
    int countCcMessagesByCcUser(@Param("ccUserId") Long ccUserId, @Param("isRead") String isRead);

    /**
     * 获取用户抄送详情列表（关联实例和历史）
     *
     * @param ccUserId 抄送用户ID
     * @return 抄送详情列表
     */
    List<ApprovalCc> selectCcDetailsByUserId(@Param("ccUserId") Long ccUserId);

    /**
     * 直接获取用户抄送详情DTO列表（支持分页）
     *
     * @param ccUserId 抄送用户ID
     * @return 抄送详情DTO列表
     */
    List<ApprovalCcDetailDTO> selectCcDetailsDTOByUserId(@Param("ccUserId") Long ccUserId);

    /**
     * 批量更新审批抄送已读状态
     *
     * @param ids 需要更新的ID列表
     * @return 结果
     */
    int batchUpdateReadStatus(@Param("list") List<Long> ids);
}