package com.fs.live.mapper;

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

import com.fs.live.domain.LiveAutoTask;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

/**
 * 直播间自动化任务配置Mapper接口
 *
 * @author fs
 * @date 2025-08-29
 */
public interface LiveAutoTaskMapper {
    /**
     * 查询直播间自动化任务配置
     *
     * @param id 直播间自动化任务配置主键
     * @return 直播间自动化任务配置
     */
    LiveAutoTask selectLiveAutoTaskById(Long id);

    /**
     * 查询直播间自动化任务配置列表
     *
     * @param liveAutoTask 直播间自动化任务配置
     * @return 直播间自动化任务配置集合
     */
    List<LiveAutoTask> selectLiveAutoTaskList(LiveAutoTask liveAutoTask);

    /**
     * 新增直播间自动化任务配置
     *
     * @param liveAutoTask 直播间自动化任务配置
     * @return 结果
     */
    int insertLiveAutoTask(LiveAutoTask liveAutoTask);

    /**
     * 修改直播间自动化任务配置
     *
     * @param liveAutoTask 直播间自动化任务配置
     * @return 结果
     */
    int updateLiveAutoTask(LiveAutoTask liveAutoTask);

    /**
     * 删除直播间自动化任务配置
     *
     * @param id 直播间自动化任务配置主键
     * @return 结果
     */
    int deleteLiveAutoTaskById(Long id);

    /**
     * 批量删除直播间自动化任务配置
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    int deleteLiveAutoTaskByIds(Long[] ids);

    @Select("select * from live_auto_task where live_id=#{liveId} and trigger_value=#{triggerValue}")
    LiveAutoTask selectLiveAutoTaskByTriggerValue(@Param("liveId") Long liveId, @Param("triggerValue")  Date triggerValue);

    @Select("select * from live_auto_task where live_id= #{liveId}")
    List<LiveAutoTask> selectLiveAutoTaskByLiveId(@Param("liveId") Long liveId);

    @Select("select * from live_auto_task where live_id= #{liveId}")
    List<LiveAutoTask> recalcLiveAutoTaskQuery(@Param("liveId") Long liveId);

    @Select("select * from live_auto_task where live_id= #{liveId} and status=1 and finish_status = 0 and abs_value>#{now} order by abs_value")
    List<LiveAutoTask> selectNoActivedByLiveId(@Param("liveId") Long existLiveId,@Param("now") Date now);

    List<LiveAutoTask> selectLiveAutoTaskByLiveIds(@Param("liveIdLists") List<Long> liveIdLists, @Param("now") Date now);

    @Update("update live_auto_task set finish_status = 1 where id = #{id}")
    void finishLiveAutoTask(LiveAutoTask task);

    @Select("select * from live_auto_task where live_id= #{liveId} and task_type = 3")
    List<LiveAutoTask> selectLiveAutoTaskBarrageList(LiveAutoTask liveAutoTask);

    void batchInsertLiveAutoTask(@Param("list") List<LiveAutoTask> addList);

    void batchUpdateLiveAutoTask(@Param("list")  List<LiveAutoTask> updateList);

    List<LiveAutoTask> selectLiveAutoTaskConsoleList(LiveAutoTask liveAutoTask);

    @Select("select * from live_auto_task where live_id= #{liveId} and abs_value > #{nowDate} and task_type in (1,2,4) and finish_status = 1 order by abs_value ")
    List<LiveAutoTask> consoleList(@Param("liveId") Long liveId,@Param("nowDate") Date nowDate);
}
