import { Injectable, Logger } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
import { CrmPruebaService } from './crm-prueba.service';

/**
 * Avisos del período de prueba de los add-ons (spec §12).
 *
 * Sólo avisa: el estado de la prueba se deriva de la fecha, así que si una
 * corrida no sale lo único que se pierde es el aviso de ese día, nunca la
 * consistencia. Por eso no hay reintentos ni compensación.
 */
@Injectable()
export class CrmPruebaCron {
  private readonly logger = new Logger(CrmPruebaCron.name);
  private corriendo = false;

  constructor(private readonly prueba: CrmPruebaService) {}

  // 08:00 hora del server. La empresa lo ve al abrir el panel a la mañana.
  @Cron('0 0 8 * * *', { name: 'crm-prueba-avisos' })
  async avisar() {
    if (this.corriendo) return;
    this.corriendo = true;
    try {
      await this.prueba.avisosDiarios();
    } catch (e) {
      this.logger.error(`Fallaron los avisos de prueba: ${(e as Error)?.message}`);
    } finally {
      this.corriendo = false;
    }
  }
}
