"use client";

/**
 * La sesión de mbProduccion.
 *
 * No hay login propio: el Back Office abre esta aplicación con `?token=...`, igual que
 * ya abre el catálogo y pedidos a proveedor. Acá se recoge ese token, se guarda, y se
 * limpia de la barra de direcciones.
 *
 * ⚠️ Por qué se limpia la URL: un token en la barra viaja a donde el usuario no espera
 * —queda en el historial, en un marcador, en una captura de pantalla que se manda por
 * WhatsApp— y es una credencial portadora que vale ocho horas. Sacarlo de ahí en cuanto
 * se guarda no cuesta nada y cierra todas esas puertas de una vez.
 */

const LLAVE = "mbproduccion.token";

export function guardarToken(token: string): void {
  try {
    window.localStorage.setItem(LLAVE, token);
  } catch {
    // Navegador con el almacenamiento bloqueado (modo privado, política del equipo).
    // La sesión va a durar lo que dure la pestaña; no es motivo para romper la pantalla.
  }
}

export function leerToken(): string | null {
  try {
    return window.localStorage.getItem(LLAVE);
  } catch {
    return null;
  }
}

export function borrarToken(): void {
  try {
    window.localStorage.removeItem(LLAVE);
  } catch {
    /* ver guardarToken */
  }
}

/**
 * Toma el token de la URL si viene, lo guarda y limpia la barra de direcciones.
 * Devuelve el token vigente, venga de la URL o de lo ya guardado.
 */
export function capturarTokenDeLaUrl(): string | null {
  if (typeof window === "undefined") return null;

  const parametros = new URLSearchParams(window.location.search);
  const entrante = parametros.get("token");

  if (entrante) {
    guardarToken(entrante);
    parametros.delete("token");
    const resto = parametros.toString();
    window.history.replaceState(
      {},
      "",
      window.location.pathname + (resto ? `?${resto}` : ""),
    );
    return entrante;
  }

  return leerToken();
}
