package com.tzld.piaoquan.api.dao.mapper.contentplatform;

import com.tzld.piaoquan.api.model.po.contentplatform.ExternalChannel;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

/**
 * ExternalChannel扩展Mapper
 */
@Mapper
public interface ExternalChannelMapperExt {

    /**
     * 查询待处理的记录列表（status=0）
     * 使用id大于lastId的方式分页查询，避免重复扫描
     * @param lastId 上一页最后一条记录的id，首次传0
     * @param limit 查询条数限制
     * @param startTime 创建时间起始值
     * @return 待处理记录列表
     */
    List<ExternalChannel> selectPendingList(@Param("lastId") long lastId, @Param("limit") int limit, @Param("startTime") Date startTime);

    /**
     * 将创建时间早于指定时间的待处理记录标记为失败
     * 用于清理长时间未处理完成的记录
     * @param timeoutTime 超时时间阈值
     * @return 更新的记录数
     */
    int markFailedForTimeoutRecords(@Param("timeoutTime") Date timeoutTime);

    /**
     * 检查 rootSourceId 是否已存在
     * @param rootSourceId 根来源ID
     * @return 存在返回1，不存在返回0
     */
    int checkRootSourceIdExists(@Param("rootSourceId") String rootSourceId);

    /**
     * 批量查询已存在的rootSourceId
     * @param rootSourceIds rootSourceId列表
     * @return 已存在的rootSourceId列表
     */
    List<String> selectExistingRootSourceIds(@Param("rootSourceIds") List<String> rootSourceIds);

    /**
     * 批量插入待处理记录（忽略重复）
     * 使用 INSERT IGNORE 实现去重
     * @param list 待插入记录列表
     * @return 插入成功的记录数
     */
    int batchInsertIgnore(@Param("list") List<ExternalChannel> list);

    /**
     * 查询 video_id 为空的记录列表
     * 用于历史数据补全 video_id
     * @param lastId 上一页最后一条记录的id，首次传0
     * @param limit 查询条数限制
     * @return video_id 为空的记录列表
     */
    List<ExternalChannel> selectEmptyVideoIdList(@Param("lastId") long lastId, @Param("limit") int limit);

    /**
     * 批量更新记录的 video_id
     * @param list 待更新记录列表（需包含 id 和 videoId）
     * @return 更新成功的记录数
     */
    int batchUpdateVideoId(@Param("list") List<ExternalChannel> list);
} 
