package org.xyzh.api.crontab;

import java.util.List;

import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.crontab.TbDataCollectionItem;
import org.xyzh.common.vo.DataCollectionItemVO;

/**
 * @description 数据采集项服务接口
 * @filename DataCollectionItemService.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-11-08
 */
public interface DataCollectionItemService {

    /**
     * @description 创建采集项
     * @param item 采集项对象
     * @return ResultDomain<TbDataCollectionItem> 创建结果
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<TbDataCollectionItem> createItem(TbDataCollectionItem item);

    /**
     * @description 批量创建采集项
     * @param itemList 采集项列表
     * @return ResultDomain<TbDataCollectionItem> 成功创建的采集项列表（dataList）
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<TbDataCollectionItem> batchCreateItems(List<TbDataCollectionItem> itemList);

    /**
     * @description 更新采集项
     * @param item 采集项对象
     * @return ResultDomain<TbDataCollectionItem> 更新结果
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<TbDataCollectionItem> updateItem(TbDataCollectionItem item);

    /**
     * @description 删除采集项
     * @param itemId 采集项ID
     * @return ResultDomain<TbDataCollectionItem> 删除结果
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<TbDataCollectionItem> deleteItem(String itemId);

    /**
     * @description 根据ID查询采集项
     * @param itemId 采集项ID
     * @return ResultDomain<DataCollectionItemVO> 查询结果
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<DataCollectionItemVO> getItemById(String itemId);

    /**
     * @description 查询采集项列表
     * @param filter 过滤条件
     * @return ResultDomain<DataCollectionItemVO> 查询结果
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<DataCollectionItemVO> getItemList(TbDataCollectionItem filter);

    /**
     * @description 分页查询采集项列表
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return ResultDomain<DataCollectionItemVO> 查询结果
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<DataCollectionItemVO> getItemPage(TbDataCollectionItem filter, PageParam pageParam);

    /**
     * @description 根据任务ID查询采集项列表
     * @param taskId 任务ID
     * @return ResultDomain<DataCollectionItemVO> 查询结果
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<DataCollectionItemVO> getItemsByTaskId(String taskId);

    /**
     * @description 将采集项转换为资源
     * @param itemId 采集项ID
     * @param tagId 标签ID（文章分类）
     * @return ResultDomain<String> 转换后的资源ID
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<String> convertToResource(String itemId, String tagId);

    /**
     * @description 批量转换为资源
     * @param itemIds 采集项ID列表
     * @param tagId 标签ID（文章分类）
     * @return ResultDomain<Integer> 转换数量
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<Integer> batchConvertToResource(java.util.List<String> itemIds, String tagId);

    /**
     * @description 忽略采集项
     * @param itemId 采集项ID
     * @return ResultDomain<TbDataCollectionItem> 操作结果
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<TbDataCollectionItem> ignoreItem(String itemId);

    /**
     * @description 统计采集项数量（按状态）
     * @param taskId 任务ID（可选）
     * @param status 状态
     * @return ResultDomain<Long> 数量
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<Long> countByStatus(String taskId, Integer status);

    /**
     * @description 更新采集项状态
     * @param itemId 采集项ID
     * @param status 状态
     * @return ResultDomain<TbDataCollectionItem> 操作结果
     * @author yslg
     * @since 2025-11-08
     */
    ResultDomain<String> updateItemStatus(String itemId, int status);
}

