"use client"; import * as React from "react"; import { UserService } from "@/services/user.service"; import { AuthService } from "@/services/auth.service"; import type { User } from "@/types/user"; import { useRouter } from "next/navigation"; import { toast } from "sonner"; interface AuthContextType { user: User | null; isLoading: boolean; isAuthenticated: boolean; login: (email: string, password: string) => Promise; register: (payload: any) => Promise; logout: () => Promise; refreshUser: () => Promise; } const AuthContext = React.createContext(null); export function AuthProvider({ children }: { children: React.ReactNode }) { const [user, setUser] = React.useState(null); const [isLoading, setIsLoading] = React.useState(true); const router = useRouter(); const refreshUser = React.useCallback(async () => { try { const userData = await UserService.getMe(); setUser(userData); } catch (error) { setUser(null); } finally { setIsLoading(false); } }, []); React.useEffect(() => { refreshUser(); }, [refreshUser]); const login = async (email: string, password: string) => { try { await AuthService.login(email, password); await refreshUser(); toast.success("Connexion réussie !"); router.push("/"); } catch (error: any) { toast.error(error.response?.data?.message || "Erreur de connexion"); throw error; } }; const register = async (payload: any) => { try { await AuthService.register(payload); toast.success("Inscription réussie ! Vous pouvez maintenant vous connecter."); router.push("/login"); } catch (error: any) { toast.error(error.response?.data?.message || "Erreur d'inscription"); throw error; } }; const logout = async () => { try { await AuthService.logout(); setUser(null); toast.success("Déconnexion réussie"); router.push("/"); } catch (error) { toast.error("Erreur lors de la déconnexion"); } }; return ( {children} ); } export const useAuth = () => { const context = React.useContext(AuthContext); if (!context) { throw new Error("useAuth must be used within an AuthProvider"); } return context; };