/**
 * Arma un nombre de archivo legible y seguro para `Content-Disposition`
 * a partir de datos humanos (número de documento, nombre, fecha), nunca ids.
 *
 * - Quita acentos y caracteres fuera de [A-Za-z0-9._-] (se reemplazan por `-`).
 * - Descarta partes vacías.
 * - Si no queda nada útil, usa `fallback` + fecha del día.
 *
 * nombreArchivo(['recibo', '001-001-0000123'], 'pdf') → "recibo-001-001-0000123.pdf"
 */
export function nombreArchivo(
  partes: Array<string | number | null | undefined>,
  extension: string,
  fallback = 'documento',
): string {
  const limpiar = (v: string) =>
    v
      .normalize('NFD')
      .replace(/[̀-ͯ]/g, '')
      .replace(/[^A-Za-z0-9._-]+/g, '-')
      .replace(/-+/g, '-')
      .replace(/^-|-$/g, '');

  const base = partes
    .filter((p) => p !== null && p !== undefined && String(p).trim() !== '')
    .map((p) => limpiar(String(p)))
    .filter(Boolean)
    .join('-')
    .slice(0, 120);

  return `${base || `${limpiar(fallback)}-${fechaArchivo()}`}.${extension}`;
}

/** Fecha local del servidor como YYYY-MM-DD, para nombres de archivo. */
export function fechaArchivo(fecha: Date = new Date()): string {
  const y = fecha.getFullYear();
  const m = String(fecha.getMonth() + 1).padStart(2, '0');
  const d = String(fecha.getDate()).padStart(2, '0');
  return `${y}-${m}-${d}`;
}
