package com.nokia.tsl_data.service;

import java.util.concurrent.ScheduledFuture;

import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Service;

import lombok.Getter;

/**
 * 定时任务相关逻辑
 * 
 * 支持查询任务状态、启动任务、停止任务、修改任务定时表达式
 */
@Service
public class TslCronTaskService {

    @Getter
    private String cronExpression;
    @Getter
    private boolean isStarted = false;
    private ScheduledFuture<?> future = null;

    private final ThreadPoolTaskScheduler taskScheduler;
    private final TslTaskService tslTaskService;

    public TslCronTaskService(ThreadPoolTaskScheduler taskScheduler, TslTaskService tslTaskService) {
        this.taskScheduler = taskScheduler;
        this.tslTaskService = tslTaskService;
    }

    /**
     * 启动任务
     */
    public void startCronTask() {
        if (!isStarted) {
            future = taskScheduler.schedule(tslTaskService.cronTask(), new CronTrigger(cronExpression));
            isStarted = true;
        }
    }

    /**
     * 停止任务
     */
    public void stopCronTask() {
        if (isStarted) {
            if (future != null) {
                // 如果有正在执行的任务，需要执行完
                future.cancel(false);
            }
            isStarted = false;
        }
    }

    /**
     * 修改任务定时表达式
     * 
     * @param cronExpression
     */
    public void updateCronExpression(String newCronExpression) {
        cronExpression = newCronExpression;
        if (isStarted) {
            // 如果任务在启动状态，需要停止任务并重新启动
            startCronTask();
            startCronTask();
        }
    }

}
