<?php
/**
 * CMS Léger — Point d'entrée
 * ══════════════════════════
 * Ce fichier (ainsi que .htaccess, style.css, articles/, data/, inc/)
 * peut être placé dans n'importe quel sous-répertoire du serveur
 * sans aucune modification de configuration.
 *
 * @see inc/config.php  pour personnaliser le CMS
 */

require __DIR__ . '/inc/config.php';
require __DIR__ . '/inc/utils.php';
require __DIR__ . '/inc/router.php';
require __DIR__ . '/inc/compteur.php';
require __DIR__ . '/inc/parser.php';
require __DIR__ . '/inc/html.php';

// ── 1. Résoudre l'URL en contexte {path, article, lang} ──────
$ctx = resolveRequest();

if ($ctx['path'] === null) {
    renderError(
        'Fichier introuvable',
        'Impossible de trouver l\'article <strong>' . htmlspecialchars($ctx['article']) . '</strong> '
        . 'dans aucune langue disponible, et la page d\'accueil est également absente.<br>'
        . 'Créez le fichier <code>articles/accueil.fr</code>.'
    );
    exit;
}

// ── 2. Initialiser l'état de la page ─────────────────────────
// $state est modifié par référence par les blocs meta{} et theme{}
// pendant le parsing, puis consommé par buildHtmlPage().
$state = [
    'meta' => [
        'titre'       => null,
        'description' => null,
        'motscles'    => null,
        'auteur'      => null,
        'image'       => null,
        'robots'      => 'index,follow',
        'canonical'   => null,
        'couleur'     => null,
        'type'        => 'website',
    ],
    'theme' => [],
];

// ── 3. Parser le contenu de l'article ────────────────────────
try {
    $bodyHtml = parseBlocks(file_get_contents($ctx['path']), $ctx, $state);
} catch (RuntimeException $e) {
    renderError(
        'Erreur de syntaxe',
        'L\'article <strong>' . htmlspecialchars($ctx['article'] . '.' . $ctx['lang']) . '</strong>'
        . ' contient une erreur :<br><code>' . htmlspecialchars($e->getMessage()) . '</code>'
    );
    exit;
}

// ── 4. Émettre la page HTML complète ─────────────────────────
echo buildHtmlPage($ctx, $state, $bodyHtml);
