import React, { createContext, useContext, useEffect, useState } from "react"; import { Session, User } from "@supabase/supabase-js"; import { supabase } from "../lib/supabase"; interface AuthContextType { session: Session | null; user: User | null; isLoading: boolean; signOut: () => Promise; } const AuthContext = createContext(undefined); export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { const [session, setSession] = useState(null); const [user, setUser] = useState(null); const [isLoading, setIsLoading] = useState(true); useEffect(() => { supabase.auth.getSession().then(({ data: { session } }) => { setSession(session); setUser(session?.user ?? null); setIsLoading(false); }); const { data: { subscription }, } = supabase.auth.onAuthStateChange((_event, session) => { setSession(session); setUser(session?.user ?? null); setIsLoading(false); }); return () => subscription.unsubscribe(); }, []); const signOut = async () => { await supabase.auth.signOut(); }; return ( {children} ); }; export const useAuth = () => { const context = useContext(AuthContext); if (context === undefined) { throw new Error("useAuth must be used within an AuthProvider"); } return context; };