<?php
// Connexion à la base de données (corrige chemin relatif depuis includes/)
@include __DIR__.'/../config/connexion.php';
if(!isset($pdo) || !($pdo instanceof PDO)) { $pdo = null; }
// Garde d'abonnement (redirige si expiré)
@include __DIR__.'/subscription_guard.php';
// Fonction pour récupérer les éléments de menu
if (!function_exists('getMenuItems')) {
    function getMenuItems($pdo, $parent_id = null) {
        $query = "SELECT * FROM menu_items WHERE parent_id " . ($parent_id === null ? "IS NULL" : "= :parent_id") . " ORDER BY menu_order";
        $stmt = $pdo->prepare($query);
        
        if ($parent_id !== null) {
            $stmt->bindParam(':parent_id', $parent_id, PDO::PARAM_INT);
        }
        
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

// Fonction pour générer le HTML du menu
function generateMenuHTML($pdo) {
    // Déterminer la page courante
    $current_page = basename($_SERVER['SCRIPT_NAME']);

    // Récupérer info compagnie (nom + ref) depuis compagnie_table
    $compagnie_name = 'Compagnie';
    $compagnie_ref = 'default';
    if ($pdo instanceof PDO) {
        try {
            $stmtCompagnie = $pdo->query("SELECT compagnie_name, compagnie_ref FROM compagnie_table LIMIT 1");
            $rowCompagnie = $stmtCompagnie->fetch(PDO::FETCH_ASSOC);
            if ($rowCompagnie && !empty($rowCompagnie['compagnie_name'])) {
                $compagnie_name = $rowCompagnie['compagnie_name'];
                if(!empty($rowCompagnie['compagnie_ref'])){ $compagnie_ref = $rowCompagnie['compagnie_ref']; }
            }
        } catch (Exception $e) {
            // garder le nom par défaut
        }
    }
    // Déterminer chemin logo (fallback si absent)
    $logoFileName = 'logo.png';
    $logoRelative = 'data/'.basename($compagnie_ref).'/'.$logoFileName; // chemin utilisé dans src
    $logoFsPath = dirname(__DIR__).'/'.$logoRelative; // chemin serveur
    if(!is_file($logoFsPath) || filesize($logoFsPath)==0){
        $logoRelative = 'data/default_logo.png';
    }

    $html = '<ul class="navbar-nav sidebar sidebar-light accordion" id="accordionSidebar">';
    $html .= '<a class="sidebar-brand d-flex align-items-center justify-content-center" href="dashboard.php">'
           . '<div class="sidebar-brand-icon">'
           . '<img src="' . htmlspecialchars('./'.$logoRelative,ENT_QUOTES,'UTF-8') . '" style="background-color:#fff;border-radius:2%;width:50px;height:50px;object-fit:contain;" alt="Logo">'
           . '</div>'
           . '<div class="sidebar-brand-text mx-3">' . htmlspecialchars($compagnie_name) . '</div>'
           . '</a><hr class="sidebar-divider my-0">';

    $mainItems = ($pdo instanceof PDO) ? getMenuItems($pdo) : [];

    foreach ($mainItems as $item) {
        if ($item['is_heading']) {
            continue;
        } else {
            // Normaliser / valider classe icone
            $rawIcon = trim($item['icon']);
            if($rawIcon==='') { $rawIcon='fas fa-circle'; }
            // Si aucune sous-classe fa- après séparation, fallback
            if(strpos($rawIcon,'fa ')===false && strpos($rawIcon,'fa-')===false){ $rawIcon='fas fa-circle'; }
            // Restreindre à caractères autorisés
            if(!preg_match('~^[a-z0-9 \-fa]+$~i',$rawIcon)){ $rawIcon='fas fa-circle'; }
            $item['icon']=$rawIcon;
            // Vérifier si l'item ou un de ses sous-items est actif
            $subItems = getMenuItems($pdo, $item['id']);
            $isParentActive = false;
            $activeClass = '';
            $showClass = '';
            $isExpanded = 'false';

            if (!empty($subItems)) {
                foreach ($subItems as $subItem) {
                    if (isset($subItem['link']) && basename($subItem['link']) === $current_page) {
                        $isParentActive = true;
                        break;
                    }
                }
                if ($isParentActive) {
                    $activeClass = 'active';
                    $showClass = 'show';
                    $isExpanded = 'true';
                }
                $collapseId = 'collapse' . $item['id'];
                $html .= '
                <li class="nav-item ' . $activeClass . '">
                  <a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#' . $collapseId . '"
                    aria-expanded="' . $isExpanded . '" aria-controls="' . $collapseId . '">
                    <i class="' . htmlspecialchars($item['icon']) . ' fa-fw"></i>
                    <span>' . htmlspecialchars($item['title']) . '</span>
                  </a>
                  <div id="' . $collapseId . '" class="collapse ' . $showClass . '" aria-labelledby="heading' . $item['id'] . '" data-parent="#accordionSidebar">
                    <div class="bg-white py-2 collapse-inner rounded">
                      <h6 class="collapse-header">' . htmlspecialchars($item['title']) . '</h6>';
                foreach ($subItems as $subItem) {
                    $subActiveClass = (isset($subItem['link']) && basename($subItem['link']) === $current_page) ? 'active' : '';
                    $html .= '<a class="collapse-item ' . $subActiveClass . '" href="' . htmlspecialchars($subItem['link']) . '">' . htmlspecialchars($subItem['title']) . '</a>';
                }
                $html .= '</div></div></li>';
            } else {
                // Item sans sous-menu
                $activeClass = (isset($item['link']) && basename($item['link']) === $current_page) ? 'active' : '';
                $html .= '
                <li class="nav-item ' . $activeClass . '">
                  <a class="nav-link" href="' . htmlspecialchars($item['link']) . '">
                    <i class="' . htmlspecialchars($item['icon']) . ' fa-fw"></i>
                    <span>' . htmlspecialchars($item['title']) . '</span>
                  </a>
                </li>';
            }
        }
    }

    $html .= '<hr class="sidebar-divider">
              <div class="version" id="version-ruangadmin"></div>
            </ul>';

    return $html;
}

// Afficher le menu
echo generateMenuHTML($pdo);
?>
<script>
// Normalisation des préfixes Font Awesome si certaines icônes (v6) ne se chargent pas avec lib v5
(function(){
    var map = {
        'fa-solid':'fas',
        'fa-regular':'far',
        'fa-light':'far', // approximation
        'fa-thin':'fas',  // fallback
        'fa-duotone':'fas',
        'fa-brands':'fab'
    };
    var repaired = 0;
        document.addEventListener('DOMContentLoaded', function(){
            document.querySelectorAll('#accordionSidebar i[class*="fa-"]').forEach(function(ic){
                var cls = ic.className.split(/\s+/).filter(Boolean);
                var changed=false;
                // Remap style prefixes
                for(var i=0;i<cls.length;i++){
                    if(map[cls[i]]){ cls[i]=map[cls[i]]; changed=true; }
                }
                // Remap FA6 icon names -> FA5
                var nameMap = {
                    'fa-gear':'fa-cog',
                    'fa-gears':'fa-cogs',
                    'fa-circle-question':'fa-question-circle',
                    'fa-circle-info':'fa-info-circle',
                    'fa-user-gear':'fa-user-cog'
                };
                for(var j=0;j<cls.length;j++){
                    if(nameMap[cls[j]]){ cls[j]=nameMap[cls[j]]; changed=true; }
                }
                // Nettoyer doublons style (garder premier fas/far/fab)
                var hasStyle=false;
                cls = cls.filter(function(c){
                    if(/^fa[srb]$/.test(c)){
                        if(hasStyle) { changed=true; return false; }
                        hasStyle=true; return true;
                    }
                    return true;
                });
                if(!hasStyle){ cls.unshift('fas'); changed=true; }
                if(changed){ ic.className = Array.from(new Set(cls)).join(' '); repaired++; }
            });
        // Optionnel: console debug seulement sur infos.php
        if(repaired && /infos\.php$/i.test(window.location.pathname)){
            console.info('[Sidebar] Icônes réparées:', repaired);
        }
    });
})();
</script>
<?php
?>