import React, { createContext, useState, useContext, useEffect } from 'react';

// 1. Crée le contexte d'authentification
export const AuthContext = createContext(null);

// 2. Crée un composant fournisseur d'authentification
export const AuthProvider = ({ children }) => {
    // État pour stocker les informations de l'utilisateur (null si non connecté)
    // En production, vous voudriez vérifier localStorage pour un token/utilisateur ici
    const [user, setUser] = useState(null);

    // Simulation de connexion/déconnexion
    // En réalité, cette fonction ferait un appel API à votre backend
    const login = (userData) => {
        // Sauvegarder l'utilisateur dans le state
        setUser(userData);
        // Optionnel: sauvegarder les infos de l'utilisateur (ou un token) dans localStorage
        // pour maintenir la session après un rafraîchissement de page
        localStorage.setItem('user', JSON.stringify(userData));
    };

    const logout = () => {
        setUser(null);
        // Nettoyer localStorage
        localStorage.removeItem('user');
    };

    // Charger l'utilisateur depuis localStorage au démarrage de l'application
    useEffect(() => {
        const storedUser = localStorage.getItem('user');
        if (storedUser) {
            setUser(JSON.parse(storedUser));
        }
    }, []); // Le tableau vide assure que cela ne s'exécute qu'une seule fois au montage

    // La valeur qui sera fournie à tous les consommateurs du contexte
    const authContextValue = {
        user,    // L'objet utilisateur (ex: { name: "Ouijdane IMER", email: "..." })
        login,   // Fonction pour connecter un utilisateur
        logout,  // Fonction pour déconnecter un utilisateur
    };

    return (
        <AuthContext.Provider value={authContextValue}>
            {children}
        </AuthContext.Provider>
    );
};

// Hook personnalisé pour faciliter l'utilisation du contexte dans les composants
export const useAuth = () => {
    const context = useContext(AuthContext);
    if (context === undefined) {
        throw new Error('useAuth must be used within an AuthProvider');
    }
    return context;
};