import React, { createContext, useContext, useState, useEffect } from 'react'; import api from './api'; const AuthContext = createContext(null); export const AuthProvider = ({ children }) => { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const [token, setToken] = useState(localStorage.getItem('token')); useEffect(() => { const storedToken = localStorage.getItem('token'); if (storedToken) { setToken(storedToken); api.getMe() .then(data => setUser(data.user)) .catch(() => { localStorage.removeItem('token'); api.setToken(null); }) .finally(() => setLoading(false)); } else { setLoading(false); } }, []); const login = async (email, password) => { const data = await api.login(email, password); setUser(data.user); setToken(data.token); return data; }; const register = async (email, username, password) => { const data = await api.register(email, username, password); setUser(data.user); setToken(data.token); return data; }; const logout = () => { localStorage.removeItem('token'); api.setToken(null); setUser(null); setToken(null); }; return ( {children} ); }; export const useAuth = () => { const context = useContext(AuthContext); if (!context) { throw new Error('useAuth must be used within AuthProvider'); } return context; };