import { createContext, useContext, useState, useEffect } from "react"; import { apiClient } from "@/lib/api-client"; interface User { id: string; email: string; } interface AuthContextType { user: User | null; login: (token: string, user: User) => Promise; logout: () => Promise; loading: boolean; } const AuthContext = createContext(null); export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children, }) => { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const token = localStorage.getItem("authToken"); const storedUser = localStorage.getItem("user"); if (token && storedUser) { setUser(JSON.parse(storedUser)); apiClient.defaults.headers.common["Authorization"] = `Bearer ${token}`; } setLoading(false); }, []); const login = async (token: string, user: User) => { localStorage.setItem("authToken", token); localStorage.setItem("user", JSON.stringify(user)); apiClient.defaults.headers.common["Authorization"] = `Bearer ${token}`; setUser(user); }; const logout = async () => { try { await apiClient.post("/auth/logout"); } catch (error) { console.error("Logout failed:", error); } finally { localStorage.removeItem("authToken"); localStorage.removeItem("user"); delete apiClient.defaults.headers.common["Authorization"]; setUser(null); } }; return ( {children} ); }; export const useAuthContext = () => { const context = useContext(AuthContext); if (!context) { throw new Error("useAuth must be used within an AuthProvider"); } return context; };