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.TbTaskResource;

import java.util.List;

/**
 * @description TaskResourceMapper.java文件描述 任务资源关联数据访问层
 * @filename TaskResourceMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface TaskResourceMapper extends BaseMapper<TbTaskResource> {

    /**
     * @description 查询任务资源关联列表
     * @param filter 过滤条件
     * @return List<TbTaskResource> 任务资源关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbTaskResource> selectTaskResources(TbTaskResource filter);

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

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

    /**
     * @description 根据资源ID查询任务关联列表
     * @param resourceId 资源ID
     * @return List<TbTaskResource> 任务关联列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbTaskResource> selectByResourceId(@Param("resourceId") String resourceId);

    /**
     * @description 根据任务ID和资源ID查询关联信息
     * @param taskId 任务ID
     * @param resourceId 资源ID
     * @return TbTaskResource 关联信息
     * @author yslg
     * @since 2025-10-15
     */
    TbTaskResource selectByTaskIdAndResourceId(@Param("taskId") String taskId, @Param("resourceId") String resourceId);

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

    /**
     * @description 插入任务资源关联
     * @param taskResource 任务资源关联
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertTaskResource(TbTaskResource taskResource);

    /**
     * @description 更新任务资源关联
     * @param taskResource 任务资源关联
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateTaskResource(TbTaskResource taskResource);

    /**
     * @description 删除任务资源关联
     * @param taskResource 任务资源关联
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteTaskResource(TbTaskResource taskResource);

    /**
     * @description 批量插入任务资源关联
     * @param taskResourceList 任务资源关联列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertTaskResources(@Param("taskResourceList") List<TbTaskResource> taskResourceList);

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

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

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

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

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