package org.xyzh.crontab.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.crontab.TbCrontabLog;

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

/**
 * @description 定时任务日志数据访问层
 * @filename CrontabLogMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-25
 */
@Mapper
public interface CrontabLogMapper extends BaseMapper<TbCrontabLog> {

    /**
     * @description 插入日志
     * @param log 日志信息
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-25
     */
    int insertLog(@Param("log") TbCrontabLog log);

    /**
     * @description 更新日志
     * @param log 日志信息
     * @return int 影响行数
     * @author yslg
     * @since 2025-11-12
     */
    int updateLog(@Param("log") TbCrontabLog log);

    /**
     * @description 根据ID查询日志
     * @param logId 日志ID
     * @return TbCrontabLog 日志信息
     * @author yslg
     * @since 2025-10-25
     */
    TbCrontabLog selectLogById(@Param("logId") String logId);

    /**
     * @description 根据任务ID查询日志列表
     * @param taskId 任务ID
     * @return List<TbCrontabLog> 日志列表
     * @author yslg
     * @since 2025-10-25
     */
    List<TbCrontabLog> selectLogsByTaskId(@Param("taskId") String taskId);

    /**
     * @description 根据过滤条件查询日志列表
     * @param filter 过滤条件
     * @return List<TbCrontabLog> 日志列表
     * @author yslg
     * @since 2025-10-25
     */
    List<TbCrontabLog> selectLogList(@Param("filter") TbCrontabLog filter);

    /**
     * @description 分页查询日志列表
     * @param filter 过滤条件
     * @param pageParam 分页参数
     * @return List<TbCrontabLog> 日志列表
     * @author yslg
     * @since 2025-10-25
     */
    List<TbCrontabLog> selectLogPage(@Param("filter") TbCrontabLog filter, @Param("pageParam") PageParam pageParam);

    /**
     * @description 统计日志总数
     * @param filter 过滤条件
     * @return long 总数
     * @author yslg
     * @since 2025-10-25
     */
    long countLogs(@Param("filter") TbCrontabLog filter);

    /**
     * @description 删除日志（逻辑删除）
     * @param logId 日志ID
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-25
     */
    int deleteLog(@Param("logId") String logId);

    /**
     * @description 批量删除日志
     * @param ids 日志ID列表
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-25
     */
    int batchDeleteLogs(@Param("ids") List<String> ids);

    /**
     * @description 清理指定时间之前的日志
     * @param beforeDate 指定时间
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-25
     */
    int cleanLogsByDate(@Param("beforeDate") Date beforeDate);

    /**
     * @description 根据任务ID和执行状态查询日志
     * @param taskId 任务ID
     * @param executeStatus 执行状态
     * @return List<TbCrontabLog> 日志列表
     * @author yslg
     * @since 2025-10-25
     */
    List<TbCrontabLog> selectLogsByTaskIdAndStatus(@Param("taskId") String taskId, @Param("executeStatus") Integer executeStatus);

    /**
     * @description 查询最近的执行日志
     * @param taskId 任务ID
     * @param limit 限制数量
     * @return List<TbCrontabLog> 日志列表
     * @author yslg
     * @since 2025-10-25
     */
    List<TbCrontabLog> selectRecentLogs(@Param("taskId") String taskId, @Param("limit") Integer limit);
}

