import { useState, useEffect } from "react"; import { User, Session } from "@supabase/supabase-js"; import { supabase } from "@/integrations/supabase/client"; export function useAuth() { const [user, setUser] = useState(null); const [session, setSession] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { // Set up auth state listener BEFORE getting session const { data: { subscription } } = supabase.auth.onAuthStateChange( (_event, session) => { setSession(session); setUser(session?.user ?? null); setLoading(false); } ); // Get initial session supabase.auth.getSession().then(({ data: { session } }) => { setSession(session); setUser(session?.user ?? null); setLoading(false); }); return () => subscription.unsubscribe(); }, []); const signUp = async (email: string, password: string) => { const { error } = await supabase.auth.signUp({ email, password, options: { emailRedirectTo: window.location.origin, }, }); return { error }; }; const signIn = async (email: string, password: string) => { const { error } = await supabase.auth.signInWithPassword({ email, password, }); return { error }; }; const signOut = async () => { const { error } = await supabase.auth.signOut(); return { error }; }; return { user, session, loading, signUp, signIn, signOut, }; }