package com.ruoyi.ibs.task.mapper;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.ibs.task.domain.entity.WorkRecord;
import com.ruoyi.ibs.task.domain.dto.WorkRecordDTO;
import com.ruoyi.ibs.task.domain.entity.AlterConfig;
import com.ruoyi.ibs.task.domain.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 工作清单记录Mapper接口
 * 
 * @author ruoyi
 * @date 2025-10-11
 */
@Mapper
public interface WorkRecordMapper extends BaseMapper<WorkRecord> {

    /**
     * 查询我的工作清单记录列表
     * 
     * @param workRecordDTO,username 工作清单记录
     * @return 工作清单记录集合
     */
    List<WorkRecordVO> selectWorkRecordList(@Param("dto") WorkRecordDTO workRecordDTO, @Param("username") String username);

    /**
     * 查询所有工作清单记录列表
     *
     * @param workRecordDTO,deptIds 工作清单记录
     * @return 工作清单记录集合
     */
    List<WorkRecordVO> selectAllWorkRecordList(@Param("dto") WorkRecordDTO workRecordDTO, @Param("postIds") List<Long> postIds, @Param("username") String username);

    /**
     * 修改工作清单记录
     * 
     * @param workRecordList 工作清单记录
     * @return 结果
     */
    int batchSubmitWorkRecord(@Param("list") List<WorkRecord> workRecordList);

    /**
     * 查询工作清单完成情况
     *
     * @param workRecordDTO 工作清单记录主键
     * @return 工作清单记录
     */
    List<WorkCompleteVO> selectCompleteStatus(@Param("dto") WorkRecordDTO workRecordDTO, @Param("postIds") List<Long> postIds);

    /**
     * 查询需要生成工作清单的记录
     * @param frequencyType
     * @param startTime
     * @param endTime
     * @return
     */
    List<WorkRecord> selectRecordsToGenerate(@Param("frequencyType") String frequencyType, @Param("startTime") Date startTime, @Param("endTime") Date endTime);

    /**
     * 批量插入工作清单记录
     *
     * @param workRecordList 工作清单记录
     * @return 结果
     */
    int batchInsertWorkRecord(@Param("workRecordList") List<WorkRecord> workRecordList);

    /**
     * 查询预警信息
     *
     * @param alterType 预警类型
     * @return 预警信息
     */
    List<AlterVO> selectAlterList(@Param("username") String username, @Param("status") String status, @Param("alterType") String alterType);

    /**
     * 查询所有预警信息
     *
     * @param alterType 预警类型
     * @return 预警信息
     */
    List<AlterVO> selectAllAlterList(@Param("deptId") String deptId, @Param("role") String role,
                                     @Param("status") String status, @Param("alterType") String alterType,
                                     @Param("username") String username, @Param("forwardFlag") String forwardFlag);

    AlterCountVO selectAlterCount(@Param("reportTime") Date reportTime, @Param("role") String role, @Param("deptId") String deptId);

    List<AlterAssignTargetVO> selectForwardDeptTargets(@Param("branchDeptId") Long branchDeptId);

    List<AlterAssignTargetVO> selectForwardUserTargets(@Param("deptId") Long deptId, @Param("role") String role);

    int updateAlterForwardToDept(@Param("id") Long id, @Param("sourceUserName") String sourceUserName,
                                 @Param("targetDeptId") Long targetDeptId, @Param("updateBy") String updateBy);

    int updateAlterForwardToUserByBranch(@Param("id") Long id, @Param("sourceUserName") String sourceUserName,
                                         @Param("targetUserName") String targetUserName, @Param("targetNickName") String targetNickName,
                                         @Param("updateBy") String updateBy);

    int updateAlterForwardToUserByOutlet(@Param("id") Long id, @Param("sourceDeptId") Long sourceDeptId,
                                         @Param("targetUserName") String targetUserName, @Param("targetNickName") String targetNickName,
                                         @Param("updateBy") String updateBy);

    /**
     * 设置工作清单为过期
     *
     * @return 结果
     */
    int updateOverdueRecord(@Param("now") LocalDateTime now);

    /**
     * 更新已读时间
     *
     * @return 结果
     */
    int updateReadTime(@Param("id") Long id, @Param("username") String username);

    /**
     * 查询预警配置信息
     *
     * @return 预警配置信息
     */
    List<AlterConfigVO> selectAlterConfigList(String alterType);

    int updateAlterConfig(AlterConfig alterConfig);

    /**
     * 查询所有预警类型
     *
     * @param headId 总部ID（部门ID前三位）
     * @return 预警类型列表
     */
    List<String> selectAlterTypes(@Param("headId") String headId);
}
