import { Injectable, Logger } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
import { BookingStatusSyncService } from '../services/booking-status-sync.service';

/** Daily 00:10 UTC — date-driven booking status (upcoming → ongoing → completed). */
@Injectable()
export class BookingStatusSyncTask {
  private readonly logger = new Logger(BookingStatusSyncTask.name);

  constructor(private readonly syncService: BookingStatusSyncService) {}

  @Cron('10 0 * * *', {
    name: 'booking-status-sync',
    timeZone: 'UTC',
    waitForCompletion: true,
    unrefTimeout: true,
  })
  async handleCron(): Promise<void> {
    this.logger.log('Starting daily booking status sync (00:10 UTC)');
    try {
      const result = await this.syncService.syncAllTenants();
      this.logger.log(
        `Daily booking status sync finished: ${result.upcomingUpdated} upcoming, ${result.ongoingUpdated} ongoing, ${result.completedUpdated} completed across ${result.tenantsProcessed} tenants`,
      );
    } catch (err) {
      this.logger.error(
        'Daily booking status sync failed',
        err instanceof Error ? err.stack : String(err),
      );
    }
  }
}
