package org.xyzh.study.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.study.TbTaskUser;
import org.xyzh.common.vo.TaskItemVO;

import java.util.List;

/**
 * @description TaskUserMapper.java文件描述 任务用户数据访问层
 * @filename TaskUserMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface TaskUserMapper extends BaseMapper<TbTaskUser> {

    /**
     * @description 查询任务用户列表
     * @param filter 过滤条件
     * @return List<TbTaskUser> 任务用户列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbTaskUser> selectTaskUsers(TbTaskUser filter);

    /**
     * @description 根据关联ID查询关联信息
     * @param relationId 关联ID
     * @return TbTaskUser 关联信息
     * @author yslg
     * @since 2025-10-15
     */
    TbTaskUser selectByRelationId(@Param("relationId") String relationId);

    /**
     * @description 根据任务ID查询用户关联列表
     * @param taskId 任务ID
     * @return List<TbTaskUser> 用户关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbTaskUser> selectByTaskId(@Param("taskId") String taskId);

    List<TaskItemVO> selectTaskItemByTaskId(@Param("taskId") String taskId);

    List<TaskItemVO> selectUserTaskItem(@Param("taskId") String taskId, @Param("userId") String userId);
    /**
     * @description 根据用户ID查询任务关联列表
     * @param userId 用户ID
     * @return List<TbTaskUser> 任务关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbTaskUser> selectByUserId(@Param("userId") String userId);

    /**
     * @description 根据任务ID和用户ID查询关联信息
     * @param taskId 任务ID
     * @param userId 用户ID
     * @return TbTaskUser 关联信息
     * @author yslg
     * @since 2025-10-15
     */
    TbTaskUser selectByTaskIdAndUserId(@Param("taskId") String taskId, @Param("userId") String userId);

    /**
     * @description 根据状态查询任务用户关联列表
     * @param status 状态
     * @return List<TbTaskUser> 任务用户关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbTaskUser> selectByStatus(@Param("status") Integer status);

    /**
     * @description 根据用户ID和状态查询任务关联列表
     * @param userId 用户ID
     * @param status 状态
     * @return List<TbTaskUser> 任务关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbTaskUser> selectByUserIdAndStatus(@Param("userId") String userId, @Param("status") Integer status);

    /**
     * @description 检查任务用户关联是否存在
     * @param taskId 任务ID
     * @param userId 用户ID
     * @param excludeId 排除的关联ID（用于更新时排除自身）
     * @return int 存在的数量
     * @author yslg
     * @since 2025-10-15
     */
    int countByTaskIdAndUserId(@Param("taskId") String taskId, @Param("userId") String userId, @Param("excludeId") String excludeId);

    /**
     * @description 插入任务用户关联
     * @param taskUser 任务用户关联
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertTaskUser(TbTaskUser taskUser);

    /**
     * @description 更新任务用户关联
     * @param taskUser 任务用户关联
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-24
     */
    int updateTaskUser(TbTaskUser taskUser);

    /**
     * @description 删除任务用户关联
     * @param taskUser 任务用户关联
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteTaskUser(TbTaskUser taskUser);

    /**
     * @description 批量插入任务用户关联
     * @param taskUserList 任务用户关联列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertTaskUsers(@Param("taskUserList") List<TbTaskUser> taskUserList);

    /**
     * @description 批量删除任务用户关联
     * @param ids 关联ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchDeleteTaskUsers(@Param("taskId") String taskId, @Param("userIds") List<String> userIds);

    /**
     * @description 根据任务ID批量删除用户关联
     * @param taskId 任务ID
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteByTaskId(@Param("taskId") String taskId);

    /**
     * @description 根据用户ID批量删除任务关联
     * @param userId 用户ID
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteByUserId(@Param("userId") String userId);

    /**
     * @description 分页查询任务用户关联
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbTaskUser> 任务用户关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbTaskUser> selectTaskUsersPage(@Param("filter") TbTaskUser filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计任务用户关联总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countTaskUsers(@Param("filter") TbTaskUser filter);
}
