package com.fs.watch.scheduled;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 暂时手动发送看课提醒
 */
@Component
@Slf4j
public class DynamicSendStudyTask {

//    private final ThreadPoolTaskScheduler taskScheduler;
//    private final WatchSendMsgSetService watchSendMsgSetService;
//
//    // 使用构造器注入
//    @Autowired
//    public DynamicSendStudyTask(ThreadPoolTaskScheduler taskScheduler, WatchSendMsgSetService watchSendMsgSetService) {
//        this.taskScheduler = taskScheduler;
//        this.watchSendMsgSetService = watchSendMsgSetService;
//        log.info("ThreadPoolTaskScheduler 初始化完成");
//    }
//
//    private ScheduledFuture<?> startTask;
//    private ScheduledFuture<?> endTask;
//    private ScheduledFuture<?> studyTask;
//
//
//    // 在项目启动时执行此方法，自动从数据库获取参数并执行调度任务
//    @PostConstruct
//    public void init() {
//        // 从数据库获取参数，假设我们只查询一条记录
//        WatchSendMsgSet set = watchSendMsgSetService.selectWatchSendMsgSetByType("study");  // 根据你的实际情况修改
//        if (set != null) {
//            WatchSetUpSendParam param = new WatchSetUpSendParam();
//            param.setFlag(set.getStatus()==1);
//            param.setStart(set.getStart());
//            param.setEnd(set.getEnd());
//            log.info("项目启动时，自动执行看课设置调度任务，参数: {}", param);
//            scheduleTask(param);
//
//        } else {
//            log.warn("数据库未找到调度参数");
//        }
//    }
//
//    /**
//     * 调度任务，根据参数决定是开启还是关闭任务
//     *
//     * @param param 请求参数
//     */
//    public void scheduleTask(WatchSetUpSendParam param) {
//        log.info("scheduleTask 被调用，参数: {}", param);
//
//        // 参数校验
//        if (param == null) {
//            throw new IllegalArgumentException("参数不能为空");
//        }
//
//        if (!Boolean.TRUE.equals(param.getFlag())) {
//            // 如果 flag 为 false，取消任务
//            cancelAllTasks();
//            return;
//        }
//
//        // flag 为 true，继续调度任务
//        LocalTime startTime;
//        LocalTime endTime;
//
//        try {
//            startTime = LocalTime.parse(param.getStart());
//            endTime = LocalTime.parse(param.getEnd());
//            log.info("解析后的开始时间: {}, 结束时间: {}", startTime, endTime);
//        } catch (Exception e) {
//            log.error("时间格式错误，正确格式为 'HH:mm:ss': {}", e.getMessage());
//            throw new IllegalArgumentException("时间格式错误");
//        }
//
//        if (startTime.isAfter(endTime)) {
//            throw new IllegalArgumentException("开始时间不能晚于结束时间");
//        }
//
//        // 取消之前的任务（如果有）
//        cancelAllTasks();
//
//        // 检查当前时间是否在开始时间和结束时间之间
//        LocalTime now = LocalTime.now();
//        if (now.isAfter(startTime) && now.isBefore(endTime)) {
//            log.info("当前时间在开始时间和结束时间之间，立即启动周期性任务");
//            startStudyTask();
//        }
//
//        // 生成 CRON 表达式并调试输出
//        log.info("生成的开始任务 CRON 表达式: {}", String.format("%d %d %d * * ?", startTime.getSecond(), startTime.getMinute(), startTime.getHour()));
//        log.info("生成的结束任务 CRON 表达式: {}", String.format("%d %d %d * * ?", endTime.getSecond(), endTime.getMinute(), endTime.getHour()));
//
//        // 调度每天开始和结束的任务
//        startTask = taskScheduler.schedule(() -> {
//            log.info("开始任务触发，当前时间: {}", LocalTime.now());
//            startStudyTask();
//        }, toDailyTrigger(startTime));
//
//        endTask = taskScheduler.schedule(() -> {
//            log.info("结束任务触发，当前时间: {}", LocalTime.now());
//            stopStudyTask();
//        }, toDailyTrigger(endTime));
//    }
//
//    /**
//     * 开始周期性任务
//     */
//    private void startStudyTask() {
//        if (studyTask == null || studyTask.isCancelled()) {
//            log.info("周期性任务未启动，开始启动...");
//            studyTask = taskScheduler.scheduleAtFixedRate(this::sendStudy, 60 * 1000); // 每分钟执行一次
//            log.info("周期性任务已启动，当前时间: {}", LocalTime.now());
//        } else {
//            System.out.println("周期性任务已经存在且正在运行，当前时间: " + LocalTime.now());
//        }
//    }
//
//    /**
//     * 停止周期性任务
//     */
//    private void stopStudyTask() {
//        if (studyTask != null) {
//            studyTask.cancel(false);
//            studyTask = null;
//            log.info("周期性任务已停止，当前时间: {}", LocalTime.now());
//        }
//    }
//
//    /**
//     * 取消所有任务
//     */
//    private void cancelAllTasks() {
//        if (startTask != null) {
//            startTask.cancel(false);
//            startTask = null;
//        }
//        if (endTask != null) {
//            endTask.cancel(false);
//            endTask = null;
//        }
//        stopStudyTask(); // 同时停止周期性任务
//    }
//
//    /**
//     * 用药提醒的任务逻辑
//     */
//    private void sendStudy() {
//        log.info("看课提醒任务执行... 当前时间: {}", LocalTime.now());
//        // 可在此处实现发送提醒的具体逻辑
//    }
//
//    /**
//     * 将 LocalTime 转换为每日触发器
//     *
//     * @param time 目标时间
//     * @return Runnable 的触发时间
//     */
//    private Trigger toDailyTrigger(LocalTime time) {
//        // Cron 表达式格式: 秒 分 时 日 月 星期
//        String cronExpression = String.format("%d %d %d * * ?",
//                time.getSecond(),
//                time.getMinute(),
//                time.getHour());
//        return new CronTrigger(cronExpression);
//    }
}
