<?php
// ============================================================
// galeries.php — Galeries (grille) et Sliders (bandeau défilant)
// affichables en façade via shortcodes [galerie:slug] / [slider:slug].
// Un slider et une galerie sont tous deux stockés comme une "galerie"
// (table galeries + galerie_medias), distinguées par leur slug.
// Invisible côté public si vide (comme zone_image).
// ============================================================
require_once __DIR__ . '/config.php';

// Récupère les médias (url+alt) d'une galerie par slug, ordonnés.
function galerie_medias(string $slug): array {
    static $cache = [];
    if (isset($cache[$slug])) return $cache[$slug];
    $st = db()->prepare("
        SELECT m.url, m.alt, m.largeur, m.hauteur
        FROM galeries g
        JOIN galerie_medias gm ON gm.galerie_id = g.id
        JOIN medias m ON m.id = gm.media_id
        WHERE g.slug = ?
        ORDER BY gm.position ASC, gm.media_id ASC
    ");
    $st->execute([$slug]);
    return $cache[$slug] = $st->fetchAll(PDO::FETCH_ASSOC) ?: [];
}

// Rend une GALERIE en grille. Vide => rien (public) / placeholder (admin).
function rendre_galerie(string $slug): string {
    $items = galerie_medias($slug);
    $edit = function_exists('admin_connecte') && admin_connecte();
    if (!$items && !$edit) return '';
    ob_start();
    echo '<div class="gal-zone'.($edit?' is-gal-editable':'').'" data-galerie="'.e($slug).'">';
    if ($items) {
        echo '<div class="gal-grid">';
        foreach ($items as $it) {
            $u = e($it['url']); $a = e($it['alt']);
            echo '<figure class="gal-cell"><a href="/'.$u.'" class="gal-link" data-cap="'.$a.'"><img src="/'.$u.'" alt="'.$a.'" loading="lazy" decoding="async"></a></figure>';
        }
        echo '</div>';
    } else {
        echo '<div class="gal-vide">Galerie « '.e($slug).' » — vide</div>';
    }
    if ($edit) echo '<button type="button" class="gal-btn" data-galerie="'.e($slug).'">Gérer la galerie</button>';
    echo '</div>';
    return ob_get_clean();
}

// Rend un SLIDER (bandeau défilant). Vide => rien (public) / placeholder (admin).
function rendre_slider(string $slug): string {
    $items = galerie_medias($slug);
    $edit = function_exists('admin_connecte') && admin_connecte();
    if (!$items && !$edit) return '';
    $uid = 'sl'.substr(md5($slug),0,6);
    ob_start();
    echo '<div class="sl-zone'.($edit?' is-gal-editable':'').'" data-galerie="'.e($slug).'">';
    if ($items) {
        echo '<div class="sl-track" id="'.$uid.'">';
        foreach ($items as $it) {
            $u = e($it['url']); $a = e($it['alt']);
            echo '<div class="sl-item"><a href="/'.$u.'" class="gal-link" data-cap="'.$a.'"><img src="/'.$u.'" alt="'.$a.'" loading="lazy" decoding="async"></a>';
            if (!empty($it['alt'])) echo '<div class="sl-cap">'.$a.'</div>';
            echo '</div>';
        }
        echo '</div>';
        if (count($items) > 1) {
            echo '<button type="button" class="sl-nav sl-prev" data-t="'.$uid.'" aria-label="Précédent">‹</button>';
            echo '<button type="button" class="sl-nav sl-next" data-t="'.$uid.'" aria-label="Suivant">›</button>';
        }
    } else {
        echo '<div class="gal-vide">Slider « '.e($slug).' » — vide</div>';
    }
    if ($edit) echo '<button type="button" class="gal-btn" data-galerie="'.e($slug).'">Gérer le slider</button>';
    echo '</div>';
    return ob_get_clean();
}

// Remplace les shortcodes [galerie:slug] et [slider:slug] dans un HTML donné.
function appliquer_shortcodes_galerie(string $html): string {
    return preg_replace_callback('/\[(galerie|slider):([a-z0-9_-]+)\]/i', function($m){
        $type = strtolower($m[1]); $slug = strtolower($m[2]);
        return $type === 'slider' ? rendre_slider($slug) : rendre_galerie($slug);
    }, $html);
}