'use client';

import { useState, useEffect } from 'react';

interface UserRoles {
    roles: string[];
    hasRole: (role: string) => boolean;
    hasAnyRole: (roles: string[]) => boolean;
    canAccess: (requiredRoles: string[]) => boolean;
    isLoading: boolean;
}

export const useUserRoles = (): UserRoles => {
    const [roles, setRoles] = useState<string[]>([]);
    const [isLoading, setIsLoading] = useState(true);

    useEffect(() => {
        const loadUserRoles = () => {
            try {
                // Récupérer les rôles depuis le token stocké
                const accessToken = localStorage.getItem('accessToken');
                if (accessToken) {
                    // Décoder le token JWT pour extraire les rôles
                    const payload = JSON.parse(atob(accessToken.split('.')[1]));
                    
                    // Extraire les rôles du realm et du client
                    const realmRoles = payload.realm_access?.roles || [];
                    const clientRoles = payload.resource_access?.['btpxpress-frontend']?.roles || [];
                    
                    const allRoles = [...realmRoles, ...clientRoles];
                    setRoles(allRoles);
                    console.log('🔐 Rôles utilisateur chargés:', allRoles);
                } else {
                    console.warn('⚠️ Aucun token d\'accès trouvé');
                    setRoles([]);
                }
            } catch (error) {
                console.error('❌ Erreur lors du chargement des rôles:', error);
                setRoles([]);
            } finally {
                setIsLoading(false);
            }
        };

        loadUserRoles();
    }, []);

    const hasRole = (role: string): boolean => {
        return roles.includes(role);
    };

    const hasAnyRole = (requiredRoles: string[]): boolean => {
        return requiredRoles.some(role => roles.includes(role));
    };

    const canAccess = (requiredRoles: string[]): boolean => {
        if (requiredRoles.length === 0) return true;
        return hasAnyRole(requiredRoles);
    };

    return {
        roles,
        hasRole,
        hasAnyRole,
        canAccess,
        isLoading
    };
};

// Configuration des rôles par page/fonctionnalité
export const PAGE_ROLES = {
    DASHBOARD: [], // Accessible à tous les utilisateurs authentifiés
    PLANNING: ['super_admin', 'admin', 'directeur', 'manager', 'chef_chantier'],
    CHANTIERS: ['super_admin', 'admin', 'directeur', 'manager', 'chef_chantier', 'ouvrier'],
    CLIENTS: ['super_admin', 'admin', 'directeur', 'commercial'],
    DEVIS: ['super_admin', 'admin', 'directeur', 'commercial'],
    FACTURES: ['super_admin', 'admin', 'directeur', 'comptable'],
    MATERIELS: ['super_admin', 'admin', 'directeur', 'manager', 'logisticien'],
    EMPLOYES: ['super_admin', 'admin', 'directeur', 'manager'],
    EQUIPES: ['super_admin', 'admin', 'directeur', 'manager', 'chef_chantier'],
    REPORTS: ['super_admin', 'admin', 'directeur', 'manager'],
    ADMIN: ['super_admin', 'admin']
} as const;

export type PageRole = keyof typeof PAGE_ROLES;
