import type { GustitoClient } from './supabase';

// Recibe una sesion que otra parte de Gustito (p.ej. la app del cliente) paso
// por la URL en el formato #gx_at=<access_token>&gx_rt=<refresh_token>, la carga
// y limpia la URL. Asi el negocio o el repartidor entran a SU espacio sin tener
// que iniciar sesion de nuevo cuando ya lo hicieron desde la app unica.
//
// Devuelve true si cargo una sesion desde la URL.
export async function recibirSesionDeUrl(cliente: GustitoClient): Promise<boolean> {
  if (typeof window === 'undefined') return false;
  const hash = window.location.hash;
  if (!hash || hash.indexOf('gx_at') === -1) return false;

  const params = new URLSearchParams(hash.replace(/^#/, ''));
  const at = params.get('gx_at');
  const rt = params.get('gx_rt');

  // Limpiar la URL siempre: no dejar el token a la vista ni en el historial.
  const limpiarUrl = () => {
    const limpia = window.location.pathname + window.location.search;
    window.history.replaceState(null, '', limpia);
  };

  if (!at || !rt) {
    limpiarUrl();
    return false;
  }

  try {
    const { error } = await cliente.auth.setSession({ access_token: at, refresh_token: rt });
    limpiarUrl();
    return !error;
  } catch {
    limpiarUrl();
    return false;
  }
}
