import { createClient, processLock } from '@supabase/supabase-js'

export const SUPABASE_URL = (import.meta.env.VITE_SUPABASE_URL as string | undefined) ?? ''
export const SUPABASE_ANON_KEY = (import.meta.env.VITE_SUPABASE_ANON_KEY as string | undefined) ?? ''

if (!SUPABASE_URL || !SUPABASE_ANON_KEY) {
  throw new Error('Variables de entorno VITE_SUPABASE_URL y VITE_SUPABASE_ANON_KEY son requeridas')
}

const supabaseUrl = SUPABASE_URL
const supabaseAnonKey = SUPABASE_ANON_KEY

export const supabase = createClient(supabaseUrl, supabaseAnonKey, {
  auth: {
    // Por defecto supabase-js v2 usa navigator.locks para coordinar refresh de sesión entre tabs.
    // Si una tab queda colgada o se cierra sin liberar el lock, getSession()/queries quedan
    // esperando ese lock para siempre. processLock usa coordinación solo en memoria (sin
    // navigator.locks) — evita el deadlock a costa de no sincronizar refresh entre tabs,
    // lo cual es aceptable para este producto (uso mayormente single-tab).
    lock: processLock,
    // Aumentado de 5000 (default) a 30000ms.
    // Con 5s, un token refresh lento dispara ProcessLockAcquireTimeoutError, cuyo handler
    // hace await previousOperation (colgada) → chain bloqueado permanente.
    // 30s da margen para refresh en redes lentas o cold starts de Supabase Auth.
    lockAcquireTimeout: 30000,
  },
})
