/**
 * Obtiene la IP del cliente desde X-Forwarded-For confiando solo en `trustedHops` proxies.
 *
 * Cada proxy de confianza AGREGA la IP que ve al final de la cabecera, así que la IP real
 * es la que está `trustedHops` posiciones desde la derecha. Las entradas más a la izquierda
 * las puede falsificar el cliente y no se usan.
 */
export function parseClientIp(forwardedFor: string | null, trustedHops: number): string {
  if (!forwardedFor || trustedHops <= 0) return "unknown";
  const parts = forwardedFor
    .split(",")
    .map((part) => part.trim())
    .filter((part) => part.length > 0);
  const candidate = parts.at(-trustedHops);
  if (!candidate || !isPlausibleIp(candidate)) return "unknown";
  return candidate;
}

function isPlausibleIp(value: string): boolean {
  if (value.length > 45) return false;
  return /^[0-9a-fA-F:.]+$/.test(value);
}
