import { createContext, useContext, useEffect, useState } from 'react'; import { User } from '../types/api'; import * as api from '../api/client'; interface AuthContextType { user: User | null; login: (email: string, password: string) => Promise; register: (email: string, password: string, adminToken: string) => Promise; logout: () => void; isLoading: boolean; } const AuthContext = createContext(undefined); export function AuthProvider({ children }: { children: React.ReactNode }) { const [user, setUser] = useState(null); const [isLoading, setIsLoading] = useState(true); useEffect(() => { const token = localStorage.getItem('token'); if (token) { const userData = JSON.parse(localStorage.getItem('user') || 'null'); setUser(userData); } setIsLoading(false); }, []); const login = async (email: string, password: string) => { const response = await api.login(email, password); const { token, user } = response; localStorage.setItem('token', token); localStorage.setItem('user', JSON.stringify(user)); setUser(user); }; const register = async (email: string, password: string, adminToken: string) => { const response = await api.register(email, password, adminToken); const { token, user } = response; localStorage.setItem('token', token); localStorage.setItem('user', JSON.stringify(user)); setUser(user); }; const logout = () => { localStorage.removeItem('token'); localStorage.removeItem('user'); setUser(null); }; return ( {children} ); } export function useAuth() { const context = useContext(AuthContext); if (context === undefined) { throw new Error('useAuth must be used within an AuthProvider'); } return context; }