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

const AuthContext = createContext();

export const useAuth = () => {
    const context = useContext(AuthContext);
    if (!context) {
        throw new Error('useAuth must be used within an AuthProvider');
    }
    return context;
};

export const AuthProvider = ({ children }) => {
    const [user, setUser] = useState(null);
    const [isLoading, setIsLoading] = useState(true);

    useEffect(() => {
        // Vérifier si l'utilisateur est déjà connecté
        const savedUser = localStorage.getItem('user');
        if (savedUser) {
            try {
                setUser(JSON.parse(savedUser));
            } catch (error) {
                console.error('Erreur lors du parsing de l\'utilisateur sauvegardé:', error);
                localStorage.removeItem('user');
            }
        }
        setIsLoading(false);
    }, []);

    const login = async (email, password) => {
        try {
            // Tester plusieurs URLs possibles selon la configuration locale
            const possibleUrls = [
                'http://localhost/GTA/project/public/login.php',
                'http://localhost:80/GTA/project/public/login.php',
                'http://localhost/GTA/public/login.php',
                'http://localhost/public/login.php'
            ];

            let response = null;
            let lastError = null;

            for (const url of possibleUrls) {
                try {
                    console.log(' Test URL:', url);
                    response = await fetch(url, {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/json',
                        },
                        body: JSON.stringify({
                            email: email,
                            mot_de_passe: password
                        }),
                    });

                    if (response.ok) {
                        console.log(' URL qui fonctionne:', url);
                        break;
                    }
                } catch (error) {
                    lastError = error;
                    console.log(' URL échouée:', url, error.message);
                    continue;
                }
            }

            if (!response || !response.ok) {
                throw new Error('Aucune URL de connexion accessible');
            }

            const text = await response.text();
            console.log(' Réponse brute:', text);

            // Vérifier si la réponse est du JSON valide
            let data;
            try {
                data = JSON.parse(text);
            } catch (parseError) {
                console.error(' Réponse non-JSON:', text.substring(0, 200));
                throw new Error('Le serveur PHP ne répond pas correctement. Vérifiez que PHP est démarré.');
            }

            if (data.success) {
                const userData = {
                    id: data.user.id,
                    name: data.user.prenom + ' ' + data.user.nom,
                    prenom: data.user.prenom,
                    nom: data.user.nom,
                    email: data.user.email,
                    role: data.user.role || 'Employe'
                };
                setUser(userData);
                localStorage.setItem('user', JSON.stringify(userData));
                return true;
            } else {
                console.error(' Échec connexion:', data.message);
                return false;
            }
        } catch (error) {
            console.error('Erreur de connexion:', error);
            return false;
        }
    };

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

    const value = {
        user,
        login,
        logout,
        isLoading
    };

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

export default AuthContext;