import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react'; interface User { id: number; email: string; username: string; full_name?: string; } interface AuthContextType { user: User | null; token: string | null; login: (token: string, user: User) => void; logout: () => void; isAuthenticated: boolean; } const AuthContext = createContext(undefined); export const useAuth = () => { const context = useContext(AuthContext); if (context === undefined) { throw new Error('useAuth must be used within an AuthProvider'); } return context; }; interface AuthProviderProps { children: ReactNode; } export const AuthProvider: React.FC = ({ children }) => { const [user, setUser] = useState(null); const [token, setToken] = useState(null); useEffect(() => { // Check for stored token on app load const storedToken = localStorage.getItem('tcg_vault_token'); const storedUser = localStorage.getItem('tcg_vault_user'); if (storedToken && storedUser) { setToken(storedToken); setUser(JSON.parse(storedUser)); } }, []); const login = (newToken: string, newUser: User) => { setToken(newToken); setUser(newUser); localStorage.setItem('tcg_vault_token', newToken); localStorage.setItem('tcg_vault_user', JSON.stringify(newUser)); }; const logout = () => { setToken(null); setUser(null); localStorage.removeItem('tcg_vault_token'); localStorage.removeItem('tcg_vault_user'); }; const value = { user, token, login, logout, isAuthenticated: !!token, }; return {children}; };