package com.jwipc.job.logic;

import org.springframework.scheduling.quartz.QuartzJobBean;

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

/**
 * <p> </p>
 *
 * @author BOGON
 * @version 1.0
 * @since JDK 1.8
 */
public interface JobServiceLogic {

    /**
     * 安排一个计划时间运行的任务，安排在指定的时间开始，并且按照指定的计划表达式来进行运行。
     *
     * @param jobName        任务名称
     * @param jobClass       具体对应的任务类
     * @param date           日期
     * @param remark         任务备注
     * @param cronExpression 计划表达式
     * @return 是否成功
     */
    boolean scheduleCronJob(String jobName, Class<? extends QuartzJobBean> jobClass, Date date, String cronExpression, String remark);

    /**
     * 更新一个计划任务
     *
     * @param jobName 计划任务
     * @param date    具体日期
     * @return 是否更新成功
     */
    boolean updateOneTimeJob(String jobName, Date date,String remark);

    /**
     * 按照cron计划来更新一个任务安排
     *
     * @param jobName        任务名称
     * @param date           具体日期
     * @param cronExpression cron表达式
     * @return 是否更新成功
     */
    boolean updateCronJob(String jobName, Date date, String cronExpression,String remark);

    /**
     * 从调度器中删除某个任务安排
     *
     * @param jobName 任务名称
     * @return 是否删除成功
     */
    boolean unScheduleJob(String jobName);

    /**
     * 删除指定的工作调度器和以及任务相关的触发器。
     *
     * @param jobName 任务名称
     * @return 是否删除成功
     */
    boolean deleteJob(String jobName);

    /**
     * 暂停某个指定的任务
     *
     * @param jobName 任务名称
     * @return 是否暂停成功
     */
    boolean pauseJob(String jobName);

    /**
     * 重新开始某个指定的任务
     *
     * @param jobName 任务名称
     * @return 是否重启成功
     */
    boolean resumeJob(String jobName);

    /**
     * 立即执行某个任务
     *
     * @param jobName 任务名称
     * @return 是否执行成功
     */
    boolean startJobNow(String jobName);

    /**
     * 获取某个任务是否正在运行
     *
     * @param jobName 任务名称
     * @return 是否正在运行
     */
    boolean isJobRunning(String jobName);

    /**
     * 获取所有的任务信息
     *
     * @return 所有的任务信息
     */
    List<Map<String, String>> getAllJobs();

    boolean isJobWithNamePresent(String jobName);

    /**
     * 获取某个任务的运行状态
     *
     * @param jobName 任务名称
     * @return 任务状态
     */
    String getJobState(String jobName);

    /**
     * 停止某个任务
     *
     * @param jobName 任务名称
     * @return 是否停止成功
     */
    boolean stopJob(String jobName);
}