import { createContext, useContext, useState, useEffect, ReactNode } from 'react' import { authApi, User, LoginRequest } from '../services/api' interface AuthContextType { user: User | null isAuthenticated: boolean loading: boolean login: (data: LoginRequest) => Promise logout: () => Promise } const AuthContext = createContext(undefined) export function AuthProvider({ children }: { children: ReactNode }) { const [user, setUser] = useState(null) const [loading, setLoading] = useState(true) useEffect(() => { // Check for existing token on mount const token = localStorage.getItem('token') const storedUser = localStorage.getItem('user') if (token && storedUser) { try { setUser(JSON.parse(storedUser)) } catch { localStorage.removeItem('token') localStorage.removeItem('user') } } setLoading(false) }, []) const login = async (data: LoginRequest) => { const response = await authApi.login(data) localStorage.setItem('token', response.access_token) localStorage.setItem('user', JSON.stringify(response.user)) setUser(response.user) } const logout = async () => { try { await authApi.logout() } catch { // Ignore errors on logout } finally { 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 }