/**
 * 自动启动延迟调度器
 * 在应用启动时自动启动所有租户的延迟调度器
 */

import { DataSource } from 'typeorm';
import { DelaySchedulerService } from './services/delay-scheduler.service';
import { FeieApiConfig } from './types/feie.types';

export async function autoStartSchedulers(dataSource: DataSource): Promise<void> {
  console.log('=== 自动启动延迟调度器 ===');

  try {
    // 获取飞鹅API配置（简化版，实际应从配置服务获取）
    const feieConfig: FeieApiConfig = {
      baseUrl: 'https://api.feieyun.cn/Api/Open/',
      user: '',
      ukey: '',
      timeout: 10000,
      maxRetries: 3
    };

    // 获取所有有延迟任务的租户
    const tenantResults = await dataSource.query(`
      SELECT DISTINCT tenant_id
      FROM feie_print_task_mt
      WHERE print_status IN ('DELAYED', 'PENDING')
        AND scheduled_at <= NOW() + INTERVAL '1 hour'  -- 包括未来1小时内的任务
      ORDER BY tenant_id
    `);

    const tenantIds = tenantResults.map((row: any) => row.tenant_id);

    if (tenantIds.length === 0) {
      console.log('没有找到需要调度器处理的租户');
      return;
    }

    console.log(`找到 ${tenantIds.length} 个需要调度器的租户: ${tenantIds.join(', ')}`);

    // 为每个租户启动调度器
    for (const tenantId of tenantIds) {
      try {
        const scheduler = new DelaySchedulerService(dataSource, feieConfig, tenantId);

        // 检查是否已运行
        const status = scheduler.getStatus();
        if (!status.isRunning) {
          await scheduler.start();
          console.log(`租户 ${tenantId} 调度器已启动`);
        } else {
          console.log(`租户 ${tenantId} 调度器已在运行中`);
        }

        // 立即处理一次积压任务
        const result = await scheduler.triggerManualProcess(tenantId);
        if (result.success && result.processedTasks > 0) {
          console.log(`租户 ${tenantId} 处理了 ${result.processedTasks} 个积压任务`);
        }
      } catch (error) {
        console.error(`租户 ${tenantId} 调度器启动失败:`, error);
      }
    }

    console.log('=== 延迟调度器自动启动完成 ===');
  } catch (error) {
    console.error('自动启动调度器失败:', error);
  }
}