/* Contexte d'authentification global : gestion de l'utilisateur connecté */ import { createContext, useContext, useState } from 'react'; import * as api from '../services/api'; const AuthContext = createContext(null); const STORAGE_KEY = 'ds_user'; /* Fournisseur du contexte d'authentification */ export function AuthProvider({ children }) { const [user, setUser] = useState(() => { /* Restauration de la session depuis le localStorage au montage */ const stored = localStorage.getItem(STORAGE_KEY); return stored ? JSON.parse(stored) : null; }); /* Connexion : appelle l'API, stocke le token + l'utilisateur retourné */ async function login(username, password) { const connectedUser = await api.login(username, password); setUser(connectedUser); localStorage.setItem(STORAGE_KEY, JSON.stringify(connectedUser)); return connectedUser; } /* Déconnexion : vide le token, le state et le localStorage */ function logout() { api.clearToken(); setUser(null); localStorage.removeItem(STORAGE_KEY); } /* Booléen pratique pour savoir si l'utilisateur est connecté */ const isAuthenticated = !!user; return ( {children} ); } /* Hook personnalisé pour accéder au contexte d'authentification */ export function useAuth() { const context = useContext(AuthContext); if (!context) { throw new Error('useAuth doit être utilisé dans un AuthProvider'); } return context; }