import { createContext, ReactNode, useContext, useEffect, useState, } from "react"; import { apiClient } from "../api/client"; type AuthState = { isLoading: boolean; isAuthenticated: boolean; }; type AuthContextType = AuthState & { signIn: ( email: string, password: string, ) => Promise<{ success: boolean; reason?: string }>; signUp: ( email: string, password: string, ) => Promise<{ success: boolean; reason?: string }>; signOut: () => Promise; }; const AuthContext = createContext(null); export function AuthProvider({ children }: { children: ReactNode }) { const [state, setState] = useState({ isLoading: true, isAuthenticated: false, }); useEffect(() => { // Check if user is already authenticated const checkAuth = async () => { await apiClient.initialize(); setState({ isLoading: false, isAuthenticated: apiClient.isAuthenticated(), }); }; checkAuth(); }, []); const signIn = async (email: string, password: string) => { const result = await apiClient.signIn(email, password); if (result.success) { setState({ isLoading: false, isAuthenticated: true }); } return { success: result.success, reason: result.reason }; }; const signUp = async (email: string, password: string) => { const result = await apiClient.signUp(email, password); if (result.success) { setState({ isLoading: false, isAuthenticated: true }); } return { success: result.success, reason: result.reason }; }; const signOut = async () => { await apiClient.signOut(); setState({ isLoading: false, isAuthenticated: false }); }; return ( {children} ); } export function useAuth() { const context = useContext(AuthContext); if (!context) { throw new Error("useAuth must be used within an AuthProvider"); } return context; }