import { Injectable, Logger } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
import { FechasEspecialesService } from './fechas-especiales.service';

/**
 * Genera las actividades de cumpleaños, aniversarios y fechas comerciales.
 *
 * Idempotente por `ultimo_aviso_anio`: una corrida repetida no duplica nada y una
 * corrida perdida se recupera al día siguiente, porque la ventana de aviso se
 * evalúa con `>=` y no con una igualdad exacta de días.
 */
@Injectable()
export class FechasCron {
  private readonly logger = new Logger(FechasCron.name);
  private corriendo = false;

  constructor(private readonly fechas: FechasEspecialesService) {}

  // 06:30: después del cálculo de estancamiento, antes de que abran el tablero.
  @Cron('0 30 6 * * *', { name: 'crm-fechas-especiales' })
  async generar() {
    if (this.corriendo) return;
    this.corriendo = true;
    try {
      await this.fechas.generarAvisos();
    } catch (e) {
      this.logger.error(`Falló la generación de avisos de fechas: ${(e as Error)?.message}`);
    } finally {
      this.corriendo = false;
    }
  }
}
