import { Injectable, Logger, OnModuleInit } from '@nestjs/common';
import { Cron, CronExpression } from '@nestjs/schedule';
import { ConfigService } from '@nestjs/config';
import { RagflowSyncService } from '../services/ragflow-sync.service';

@Injectable()
export class SyncSchedulerTask implements OnModuleInit {
  private readonly logger = new Logger(SyncSchedulerTask.name);
  private isEnabled: boolean;

  constructor(
    private readonly configService: ConfigService,
    private readonly syncService: RagflowSyncService,
  ) {
    // 通过环境变量控制是否启用定时同步
    this.isEnabled = this.configService.get<string>('KB_SYNC_ENABLED') === 'true';
  }

  async onModuleInit() {
    if (!this.isEnabled) {
      this.logger.log('Knowledge Base sync scheduler is disabled');
      return;
    }

    this.logger.log('Knowledge Base sync scheduler initialized');
  }

  /**
   * 每周日凌晨 2 点执行全量同步
   * 确保数据一致性
   */
  @Cron('0 2 * * 0')
  async handleWeeklyFullSync() {
    if (!this.isEnabled) {
      return;
    }

    this.logger.log('Starting scheduled weekly full sync');

    try {
      const result = await this.syncService.syncAll('SCHEDULED_FULL');

      if (result.status === 'COMPLETED') {
        this.logger.log(
          `Full sync completed: ${result.processedItems} processed, ${result.failedItems} failed, ${result.skippedItems} skipped`,
        );
      } else {
        this.logger.warn(`Full sync failed: ${result.error}`);
      }
    } catch (error: any) {
      this.logger.error(`Full sync error: ${error.message}`);
    }
  }

  /**
   * 手动触发全量同步
   */
  async triggerFullSync(): Promise<string> {
    this.logger.log('Manually triggered full sync');
    return this.syncService.startFullSync();
  }

  /**
   * 手动触发增量同步
   */
  async triggerDeltaSync(): Promise<{ taskId: string; fallbackToFull: boolean; reason?: string }> {
    this.logger.log('Manually triggered delta sync');
    return this.syncService.startDeltaSync();
  }
}
