import { BadRequestException } from '@nestjs/common';

const MS_POR_DIA = 24 * 60 * 60 * 1000;

/**
 * Valida un rango de fechas de reporte para evitar escaneos gigantes (DoS de una
 * request). Lanza BadRequestException si las fechas son inválidas, si `desde` es
 * posterior a `hasta`, o si el rango excede `maxDias` (por defecto ~1 año).
 *
 * Acepta strings de fecha (YYYY-MM-DD o ISO). Si alguno viene vacío/undefined,
 * no valida ese extremo (los reportes suelen tener defaults).
 */
export function assertRangoFechas(desde?: string, hasta?: string, maxDias = 366): void {
  if (!desde || !hasta) return;

  const d = new Date(desde);
  const h = new Date(hasta);
  if (Number.isNaN(d.getTime()) || Number.isNaN(h.getTime())) {
    throw new BadRequestException('Rango de fechas inválido');
  }
  if (d.getTime() > h.getTime()) {
    throw new BadRequestException('La fecha "desde" no puede ser posterior a "hasta"');
  }
  const dias = Math.floor((h.getTime() - d.getTime()) / MS_POR_DIA);
  if (dias > maxDias) {
    throw new BadRequestException(`El rango de fechas no puede superar ${maxDias} días`);
  }
}
