<?php
/**
 * Projet                    : MageStock
 * Logiciel                  : MageStock
 * Rôle du fichier           : Routeur principal et contrôle d’accès des vues
 * Version générale          : 2.6.116
 * Lot                       : MAGESTOCK WAREHOUSE UI CONSOLIDATION1
 * Base cumulative requise   : MageStock 2.6.115
 * Date de création          : 2026-02-21
 * Date de modification      : 2026-07-25
 * Dépendances               : config.php, views/layout.php
 * Données persistantes      : aucune directement
 * Permissions requises      : session et permissions de page
 * Contraintes de sécurité   : liste blanche de routes, redirections internes, contrôle UPDATE
 * Compatibilité             : PHP 8.1 à 8.4, chemins d’installation variables
 * Résumé des modifications  : redirection de l’ancienne route warehouses vers warehouse-manager.
 *

 * Fichier  : index.php
 * Auteur   : KREMER Régis
 * Version  : 2.6.116
 * Date     : 2026-07-25
 * Description : Point d'entrée principal, routing des vues
 *
 * Changelog :
 *   v2.1.0 (2026-02-21) — Version initiale auditée et sécurisée
 *   v2.1.1 (2026-02-21) — Corrections sécurité (CSRF, MIME, session, migrateSuppliers)
 *   v2.2.0 (2026-02-21) — Permissions magasins, bons de commande, rapport d'écart,
 *   v2.3.0 (2026-02-26) — Lot 1: ajout page Emplacements (locations).
 *                      import CSV, historique prix, bon de livraison multi-lignes
 *   v2.6.25 (2026-07-09) — PLAN 1 : ajout route Plans accessible en lecture selon permissions.
 *   v2.6.33 (2026-07-09) — PLANS UX2 : ajout route dédiée plans-edit pour création/édition admin.
 *   v2.6.86 (2026-07-20) — CRUD MOBILE CARDS10 : réactivation de la route admin warehouse-manager.
 *   v2.6.99 (2026-07-20) — Redirection obligatoire vers l’assistant si aucun administrateur actif n’existe.
 *   v2.6.105 (2026-07-21) — Détection de mise à jour manuelle, page prioritaire administrateur et blocage métier.
 *   v2.6.109 (2026-07-22) — Le droit individuel admin.access n'est plus bloqué par le rôle user lors du routage.
 *   v2.6.112 (2026-07-22) — Ajout de la route administrateur Documentation.
 *   v2.6.113 (2026-07-22) — Routage RBAC du rôle Magasinier et exclusion des pages système.
 *   v2.6.114 (2026-07-22) — Alignement des routes Documentation et Licence avec Apache.
 *   v2.6.116 (2026-07-25) — Route historique warehouses redirigée vers warehouse-manager et retirée du rendu normal.
 */
require_once __DIR__.'/config.php';
startSession();
if(appInstallationRequired()){ header('Location: ' . appUrl('install')); exit; }
requireAuth(); // redirects to login.php if not logged in

// Une mise à jour déposée ou interrompue doit être finalisée avant toute activité métier.
$requestedPage = $_GET['page'] ?? 'dashboard';

// Compatibilité 2.6.116 : les anciens favoris vers l'interface « Magasins »
// convergent vers l'unique page « Gestion des magasins ».
if ($requestedPage === 'warehouses') {
    $query = $_GET;
    $query['page'] = 'warehouse-manager';
    header('Location: ' . appUrl('index.php') . '?' . http_build_query($query), true, 302);
    exit;
}

$updateStatus = magestockUpdateStatus();
if (!empty($updateStatus['requiresAttention'])) {
    if (hasPerm('update.manage')) {
        if ($requestedPage !== 'update') { header('Location: ' . appUrl('update')); exit; }
    } else {
        http_response_code(503);
        header('Retry-After: 300');
        echo '<!doctype html><html lang="fr"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Mise à jour MageStock</title><body style="font-family:system-ui;background:#f4f7fb;color:#172033;padding:32px"><main style="max-width:720px;margin:8vh auto;background:#fff;padding:32px;border:1px solid #dbe3ef"><h1>Mise à jour MageStock en attente</h1><p>Une mise à jour doit être finalisée par un administrateur avant la reprise de l’activité.</p><p><a href="'.htmlspecialchars(appUrl('logout')).'">Se déconnecter</a></p></main></body></html>';
        exit;
    }
}

// Allowed pages whitelist
$allowed = [ 'dashboard','update','products','warehouse-manager','locations','movements','inventory','scanner','barcodes','reports','analytics','lots','settings','users','alerts','suppliers','brands','orders','kits','reservations','plans','plans-edit','help','license'] ;
$page = $_GET['page'] ?? 'dashboard';
if(!in_array($page, $allowed)) $page = 'dashboard';

// Garde d'accès : le rôle admin OU l'override individuel admin.access ouvre la zone admin.
// Les droits individuels LDAP synchronisés sont donc pris en compte immédiatement,
// sans devoir transformer le compte en rôle admin.
$user = currentUser();
if(!hasAdminAccess($user)){
    $userAllowed = [ 'dashboard','scanner','movements','products','orders','kits','reservations','plans','help','license'] ;
    if(!in_array($page, $userAllowed, true)) $page = 'dashboard';
} else {
    $pagePermissions = [
        'users'=>'users.manage',
        'settings'=>'settings.write',
        'update'=>'update.manage',
    ];
    if(isset($pagePermissions[$page]) && !hasPerm($pagePermissions[$page])) $page='dashboard';
}

// Read theme from cookie (default: light — stable UX)
$theme = 'light';
if(isset($_COOKIE['sm_theme']) && in_array($_COOKIE['sm_theme'],['dark','light']))
    $theme = $_COOKIE['sm_theme'];

require_once APP_ROOT.'/views/layout.php';
?>
