import { Injectable, Logger } from '@nestjs/common';
import { Cron } from '@nestjs/schedule';
import { ActividadesService } from './actividades.service';

/**
 * Marca las oportunidades que llevan demasiados días sin actividad.
 *
 * Es idempotente y recalcula en los dos sentidos: marca las que se enfriaron y
 * libera las que volvieron a moverse. Por eso una corrida perdida no deja nada
 * inconsistente, sólo tarjetas sin pintar hasta el día siguiente.
 */
@Injectable()
export class EstancamientoCron {
  private readonly logger = new Logger(EstancamientoCron.name);
  private corriendo = false;

  // 06:00: antes de que el equipo comercial abra el tablero.
  @Cron('0 0 6 * * *', { name: 'crm-estancadas' })
  async marcar() {
    if (this.corriendo) return;
    this.corriendo = true;
    try {
      await this.actividades.marcarEstancadas();
    } catch (e) {
      this.logger.error(`Falló el cálculo de estancamiento: ${(e as Error)?.message}`);
    } finally {
      this.corriendo = false;
    }
  }

  constructor(private readonly actividades: ActividadesService) {}
}
