import { QRCodeExpirationService } from '../services/qrcodeExpiration.service';

/**
 * Cron job to send pre-expiration notifications
 * Runs daily at UTC 9:00 PM (21:00) - 3 hours before expiration
 * 
 * Cron expression: '0 21 * * *' (minute 0, hour 21, every day)
 */
class QRCodeExpirationNotificationJob {
  public static async execute(): Promise<void> {
    try {
      console.log(
        `[QRCodeExpirationNotificationJob] Starting at ${new Date().toISOString()}`
      );

      const result = await QRCodeExpirationService.sendPreExpirationNotifications();

      if (result.success) {
        console.log(
          `[QRCodeExpirationNotificationJob] ✅ Successfully sent ${result.notificationsSent} notifications`
        );
      } else {
        console.error(
          `[QRCodeExpirationNotificationJob] ⚠️ Completed with ${result.notificationsFailed} failures. ` +
          `Sent: ${result.notificationsSent}, Failed: ${result.notificationsFailed}`
        );
        if (result.errors.length > 0) {
          console.error('[QRCodeExpirationNotificationJob] Errors:', result.errors);
        }
      }
    } catch (error) {
      console.error(
        `[QRCodeExpirationNotificationJob] ❌ Fatal error:`,
        error
      );
      // Don't throw - let the cron system handle retries
    }
  }
}

export default QRCodeExpirationNotificationJob;

