package org.xyzh.news.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.resource.TbDataCollectionConfig;

import java.util.List;

/**
 * @description DataCollectionConfigMapper.java文件描述 数据采集配置数据访问层
 * @filename DataCollectionConfigMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface DataCollectionConfigMapper extends BaseMapper<TbDataCollectionConfig> {

    /**
     * @description 查询数据采集配置列表
     * @param filter 过滤条件
     * @return List<TbDataCollectionConfig> 数据采集配置列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbDataCollectionConfig> selectDataCollectionConfigs(TbDataCollectionConfig filter);

    /**
     * @description 根据配置ID查询配置信息
     * @param configId 配置ID
     * @return TbDataCollectionConfig 配置信息
     * @author yslg
     * @since 2025-10-15
     */
    TbDataCollectionConfig selectByConfigId(@Param("configId") String configId);

    /**
     * @description 根据名称查询配置
     * @param name 配置名称
     * @return TbDataCollectionConfig 配置信息
     * @author yslg
     * @since 2025-10-15
     */
    TbDataCollectionConfig selectByName(@Param("name") String name);

    /**
     * @description 根据状态查询配置列表
     * @param status 状态
     * @return List<TbDataCollectionConfig> 配置列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbDataCollectionConfig> selectByStatus(@Param("status") Integer status);

    /**
     * @description 根据类型查询配置列表
     * @param type 类型
     * @return List<TbDataCollectionConfig> 配置列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbDataCollectionConfig> selectByType(@Param("type") Integer type);

    /**
     * @description 查询启用的配置列表
     * @return List<TbDataCollectionConfig> 配置列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbDataCollectionConfig> selectActiveConfigs();

    /**
     * @description 检查配置名称是否存在
     * @param name 配置名称
     * @param excludeId 排除的配置ID（用于更新时排除自身）
     * @return int 存在的数量
     * @author yslg
     * @since 2025-10-15
     */
    int countByName(@Param("name") String name, @Param("excludeId") String excludeId);

    /**
     * @description 插入数据采集配置
     * @param dataCollectionConfig 数据采集配置
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int insertDataCollectionConfig(TbDataCollectionConfig dataCollectionConfig);

    /**
     * @description 更新数据采集配置
     * @param dataCollectionConfig 数据采集配置
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int updateDataCollectionConfig(TbDataCollectionConfig dataCollectionConfig);

    /**
     * @description 删除数据采集配置
     * @param dataCollectionConfig 数据采集配置
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int deleteDataCollectionConfig(TbDataCollectionConfig dataCollectionConfig);

    /**
     * @description 批量插入数据采集配置
     * @param dataCollectionConfigList 数据采集配置列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchInsertDataCollectionConfigs(@Param("dataCollectionConfigList") List<TbDataCollectionConfig> dataCollectionConfigList);

    /**
     * @description 批量删除数据采集配置
     * @param ids 配置ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-15
     */
    int batchDeleteDataCollectionConfigs(@Param("ids") List<String> ids);

    /**
     * @description 分页查询数据采集配置
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbDataCollectionConfig> 数据采集配置列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbDataCollectionConfig> selectDataCollectionConfigsPage(@Param("filter") TbDataCollectionConfig filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计数据采集配置总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-15
     */
    long countDataCollectionConfigs(@Param("filter") TbDataCollectionConfig filter);
}
