/* ============================================================
   supabase-client.jsx — singleton Supabase client + auth hooks
   ============================================================ */

const CFG = window.TENDER_CONFIG || {};
const HAS_SUPABASE = Boolean(CFG.SUPABASE_URL && CFG.SUPABASE_ANON_KEY);

let _sb = null;
function getSupabase() {
  if (!HAS_SUPABASE) return null;
  if (_sb) return _sb;
  if (!window.supabase) {
    console.warn('Supabase JS library not loaded yet');
    return null;
  }
  _sb = window.supabase.createClient(CFG.SUPABASE_URL, CFG.SUPABASE_ANON_KEY, {
    auth: {
      persistSession: true,
      autoRefreshToken: true,
      storage: window.localStorage,
    },
  });
  return _sb;
}

Object.assign(window, { getSupabase, HAS_SUPABASE });

function useAuth() {
  const [session, setSession] = useState(null);
  const [loading, setLoading]  = useState(HAS_SUPABASE);

  useEffect(() => {
    if (!HAS_SUPABASE) { setLoading(false); return; }
    const sb = getSupabase();
    if (!sb) { setLoading(false); return; }

    sb.auth.getSession().then(({ data }) => {
      setSession(data.session || null);
      setLoading(false);
    });

    const { data: sub } = sb.auth.onAuthStateChange((_event, s) => {
      setSession(s || null);
    });
    return () => sub.subscription.unsubscribe();
  }, []);

  return { session, user: session?.user || null, loading };
}

async function authSignIn(email, password) {
  const sb = getSupabase();
  if (!sb) throw new Error('Supabase niet geconfigureerd');
  const { data, error } = await sb.auth.signInWithPassword({ email, password });
  if (error) throw error;
  return data;
}

async function authSignUp(email, password, orgName) {
  const sb = getSupabase();
  if (!sb) throw new Error('Supabase niet geconfigureerd');
  const { data, error } = await sb.auth.signUp({
    email, password,
    options: {
      data: { org_name: orgName || 'Mijn organisatie' },
      emailRedirectTo: window.location.origin,
    },
  });
  if (error) throw error;
  return data;
}

async function authSignOut() {
  const sb = getSupabase();
  if (!sb) return;
  await sb.auth.signOut();
  window.location.reload();
}

Object.assign(window, { useAuth, authSignIn, authSignUp, authSignOut });
