package org.xyzh.api.news.collection;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.resource.TbDataCollectionConfig;
import org.xyzh.common.dto.resource.TbDataCollectionLog;

import java.util.Date;
import java.util.List;

/**
 * @description 数据采集服务接口
 * @filename DataCollectionService.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
public interface DataCollectionService {

    // ----------------采集配置相关--------------------------------

    /**
     * @description 获取采集配置列表
     * @param status 状态（可选）
     * @return ResultDomain<TbDataCollectionConfig> 配置列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionConfig> getConfigList(Integer status);

    /**
     * @description 根据ID获取配置详情
     * @param configID 配置ID
     * @return ResultDomain<TbDataCollectionConfig> 配置详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionConfig> getConfigById(String configID);

    /**
     * @description 创建采集配置
     * @param config 配置信息
     * @return ResultDomain<TbDataCollectionConfig> 创建结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionConfig> createConfig(TbDataCollectionConfig config);

    /**
     * @description 更新采集配置
     * @param config 配置信息
     * @return ResultDomain<TbDataCollectionConfig> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionConfig> updateConfig(TbDataCollectionConfig config);

    /**
     * @description 删除采集配置
     * @param configID 配置ID
     * @return ResultDomain<Boolean> 删除结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> deleteConfig(String configID);

    /**
     * @description 更新配置状态
     * @param configID 配置ID
     * @param status 状态
     * @return ResultDomain<TbDataCollectionConfig> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionConfig> updateConfigStatus(String configID, Integer status);

    /**
     * @description 更新最后采集时间
     * @param configID 配置ID
     * @param lastCollectTime 最后采集时间
     * @return ResultDomain<TbDataCollectionConfig> 更新结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionConfig> updateLastCollectTime(String configID, Date lastCollectTime);

    // ----------------采集日志相关--------------------------------

    /**
     * @description 获取采集日志列表
     * @param configID 配置ID（可选）
     * @param startDate 开始日期（可选）
     * @param endDate 结束日期（可选）
     * @return ResultDomain<TbDataCollectionLog> 日志列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionLog> getLogList(String configID, Date startDate, Date endDate);

    /**
     * @description 根据ID获取日志详情
     * @param logID 日志ID
     * @return ResultDomain<TbDataCollectionLog> 日志详情
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionLog> getLogById(String logID);

    /**
     * @description 创建采集日志
     * @param log 日志信息
     * @return ResultDomain<TbDataCollectionLog> 创建结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionLog> createLog(TbDataCollectionLog log);

    /**
     * @description 获取配置的采集统计
     * @param configID 配置ID
     * @return ResultDomain<TbDataCollectionLog> 采集统计
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionLog> getConfigStatistics(String configID);

    // ----------------采集操作相关--------------------------------

    /**
     * @description 执行数据采集
     * @param configID 配置ID
     * @return ResultDomain<TbDataCollectionLog> 采集结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionLog> executeCollection(String configID);

    /**
     * @description 批量执行数据采集
     * @param configIDs 配置ID列表
     * @return ResultDomain<TbDataCollectionLog> 采集结果列表
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<TbDataCollectionLog> batchExecuteCollection(List<String> configIDs);

    /**
     * @description 停止采集任务
     * @param configID 配置ID
     * @return ResultDomain<Boolean> 停止结果
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<Boolean> stopCollection(String configID);

    /**
     * @description 获取采集任务状态
     * @param configID 配置ID
     * @return ResultDomain<String> 任务状态
     * @author yslg
     * @since 2025-10-15
     */
    ResultDomain<String> getCollectionStatus(String configID);
}
