/**
 * 轻量调度器 — 简单 setInterval 实现
 *
 * 使用环境变量:
 *   MONITOR_INTERVAL — 检测间隔（秒），默认 300
 *   SCHEDULER_ENABLED — 是否启动调度器，默认 false
 *
 * 逻辑:
 *   每隔 MONITOR_INTERVAL 秒，查找所有 enabled=1 的任务并依次执行
 *   简单串行执行，不并发，不崩溃整个进程
 */
const db = require('../db');
const { runTask } = require('./taskRunner');

let intervalHandle = null;
let running = false;

function getIntervalMs() {
  return (parseInt(process.env.MONITOR_INTERVAL, 10) || 300) * 1000;
}

async function tick() {
  if (running) {
    console.log('⏭  调度器: 上一轮还在跑，跳过');
    return;
  }

  running = true;
  try {
    const tasks = db.prepare('SELECT id FROM monitor_tasks WHERE enabled = 1').all();
    if (tasks.length === 0) {
      return;
    }

    console.log(`🔄 调度器: 开始执行 ${tasks.length} 个任务`);
    for (const task of tasks) {
      try {
        const result = await runTask(task.id);
        console.log(`  任务#${task.id}: ${result.message}`);
      } catch (err) {
        console.error(`  任务#${task.id} 异常:`, err.message);
      }
    }
    console.log('✅ 调度器: 本轮完成');
  } finally {
    running = false;
  }
}

function start() {
  if (intervalHandle) {
    console.log('调度器已在运行');
    return;
  }
  const ms = getIntervalMs();
  console.log(`⏰ 调度器启动: 每 ${ms / 1000}s 执行一次`);
  intervalHandle = setInterval(tick, ms);
  // 启动后立即执行一轮
  tick();
}

function stop() {
  if (intervalHandle) {
    clearInterval(intervalHandle);
    intervalHandle = null;
    console.log('⏰ 调度器已停止');
  }
}

function isRunning() {
  return intervalHandle !== null;
}

module.exports = { start, stop, isRunning, tick };
