package com.qqchen.deploy.backend.schedule.service;

import com.qqchen.deploy.backend.framework.service.IBaseService;
import com.qqchen.deploy.backend.schedule.dto.JobDashboardDTO;
import com.qqchen.deploy.backend.schedule.dto.ScheduleJobDTO;
import com.qqchen.deploy.backend.schedule.entity.ScheduleJob;
import com.qqchen.deploy.backend.schedule.query.ScheduleJobQuery;

/**
 * 定时任务Service
 * 
 * @author qichen
 */
public interface IScheduleJobService extends IBaseService<ScheduleJob, ScheduleJobDTO, ScheduleJobQuery, Long> {

    /**
     * 启动任务
     *
     * @param jobId 任务ID
     */
    void startJob(Long jobId);

    /**
     * 暂停任务
     *
     * @param jobId 任务ID
     */
    void pauseJob(Long jobId);

    /**
     * 恢复任务
     *
     * @param jobId 任务ID
     */
    void resumeJob(Long jobId);

    /**
     * 禁用任务（长期停用，但保留配置）
     *
     * @param jobId 任务ID
     */
    void disableJob(Long jobId);

    /**
     * 恢复启用（解除禁用）任务
     * @param jobId 任务ID
     */
    void enableJob(Long jobId);

    /**
     * 立即执行一次任务（仅限ENABLED和PAUSED状态）
     *
     * @param jobId 任务ID
     */
    void triggerJob(Long jobId);

    /**
     * 更新任务的Cron表达式
     *
     * @param jobId 任务ID
     * @param cronExpression 新的Cron表达式
     */
    void updateCron(Long jobId, String cronExpression);

    /**
     * 加载所有启用的任务到调度器
     */
    void loadAllEnabledJobs();

    /**
     * 获取任务Dashboard数据
     * 包含任务统计、正在执行的任务、最近执行日志
     *
     * @return Dashboard数据
     */
    JobDashboardDTO getDashboard();
}
