import { createContext, useContext, useState, useEffect } from 'react'; import axios from 'axios'; import { useNavigate } from 'react-router-dom'; import { toast } from 'react-toastify'; const AuthContext = createContext(); export function AuthProvider({ children }) { const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); const navigate = useNavigate(); // Set axios defaults axios.defaults.withCredentials = true; // Check auth status on app load useEffect(() => { const checkAuth = async () => { try { const res = await axios.get('/api/auth/me'); setUser(res.data.user); } catch (err) { setUser(null); } finally { setLoading(false); } }; checkAuth(); }, []); // Register user const register = async (formData) => { try { setLoading(true); const res = await axios.post('/api/auth/register', formData); setUser(res.data.user); toast.success('ثبت‌نام با موفقیت انجام شد'); navigate('/dashboard'); return res.data; } catch (err) { const errorMessage = err.response?.data?.message || 'خطا در ثبت‌نام'; toast.error(errorMessage); throw errorMessage; } finally { setLoading(false); } }; // Login user const login = async (formData) => { try { setLoading(true); const res = await axios.post('/api/auth/login', formData); setUser(res.data.user); toast.success('ورود با موفقیت انجام شد'); navigate('/dashboard'); return res.data; } catch (err) { const errorMessage = err.response?.data?.message || 'خطا در ورود'; toast.error(errorMessage); throw errorMessage; } finally { setLoading(false); } }; // Logout user const logout = async () => { try { await axios.get('/api/auth/logout'); setUser(null); toast.success('خروج با موفقیت انجام شد'); navigate('/'); } catch (err) { toast.error('خطا در خروج از سیستم'); } }; // Check if user is authenticated const isAuthenticated = () => { return !!user; }; // Check if user has specific role const hasRole = (role) => { return user?.role === role; }; return ( {children} ); } export function useAuth() { return useContext(AuthContext); }