/**
 * Estado del envío del documento por correo al receptor (estado_envio_email).
 * Lo escribe el middleware; el ERP solo lo sincroniza. Valores reales:
 * "Enviado", "Pendiente", "No enviado", o el texto del error
 * ("Error: No recipients defined", "Error: Connection timeout",
 * "Error: Invalid login: 535-5.7.8 …").
 */
export type EstadoCorreo =
  | 'sin_dato'
  | 'enviado'
  | 'pendiente'
  | 'no_enviado'
  /** El receptor no tiene correo cargado: lo carga el cliente. */
  | 'sin_destinatario'
  /** Usuario o contraseña del correo propio de la empresa rechazados: lo corrige el cliente. */
  | 'credenciales_smtp'
  /** Falla de red del servidor de correo: transitoria. */
  | 'falla_envio'
  | 'error';

export function clasificarEnvioCorreo(valor: string | null | undefined): EstadoCorreo {
  const v = (valor ?? '').trim();
  if (!v) return 'sin_dato';
  if (/^enviado$/i.test(v)) return 'enviado';
  if (/^pendiente$/i.test(v)) return 'pendiente';
  if (/^no enviado$/i.test(v)) return 'no_enviado';
  if (/no recipients/i.test(v)) return 'sin_destinatario';
  if (/invalid login|\b535\b|authentication|auth\w* failed|badcredentials/i.test(v)) return 'credenciales_smtp';
  if (/time\s?out|econn\w*|socket|getaddrinfo|network/i.test(v)) return 'falla_envio';
  return 'error';
}
