<?php
// ============================================================
// schema.php — crée toutes les tables SQLite si absentes.
// Inclus au besoin ; idempotent.
// ============================================================
require_once __DIR__ . '/config.php';

function init_schema(): void {
    $db = db();
    $db->exec("
    CREATE TABLE IF NOT EXISTS utilisateurs (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        login TEXT UNIQUE NOT NULL,
        mot_de_passe TEXT NOT NULL,        -- hash
        nom TEXT,
        cree_le TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS medias (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        fichier TEXT NOT NULL,             -- nom du fichier dans /medias
        url TEXT NOT NULL,                 -- chemin relatif (medias/xxx.webp)
        alt TEXT DEFAULT '',
        largeur INTEGER,
        hauteur INTEGER,
        poids INTEGER,
        source TEXT DEFAULT 'upload',      -- upload | wordpress | colle
        cree_le TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS categories (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nom TEXT NOT NULL,
        slug TEXT UNIQUE NOT NULL,
        type TEXT DEFAULT 'article',       -- article | temoignage | etude | type_de_soins
        description TEXT DEFAULT ''
    );

    CREATE TABLE IF NOT EXISTS articles (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        titre TEXT NOT NULL,
        slug TEXT UNIQUE NOT NULL,
        extrait TEXT DEFAULT '',
        contenu TEXT DEFAULT '',
        image_id INTEGER REFERENCES medias(id) ON DELETE SET NULL,
        categorie_id INTEGER REFERENCES categories(id) ON DELETE SET NULL,
        statut TEXT DEFAULT 'brouillon',   -- brouillon | publie
        meta_titre TEXT DEFAULT '',
        meta_desc TEXT DEFAULT '',
        cree_le TEXT DEFAULT (datetime('now')),
        modifie_le TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS temoignages (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        titre TEXT NOT NULL,
        slug TEXT UNIQUE NOT NULL,
        contenu TEXT DEFAULT '',
        extrait TEXT DEFAULT '',
        auteur TEXT DEFAULT '',            -- signature (ex: J.T - Québec)
        type_soin_id INTEGER REFERENCES categories(id) ON DELETE SET NULL,
        image_id INTEGER REFERENCES medias(id) ON DELETE SET NULL,
        statut TEXT DEFAULT 'publie',      -- brouillon | publie
        est_formation INTEGER DEFAULT 0,   -- 1 = témoignage formation
        ancienne_url TEXT DEFAULT '',      -- pour la redirection 301
        meta_titre TEXT DEFAULT '',
        meta_desc TEXT DEFAULT '',
        date_pub TEXT,
        cree_le TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS temoignages_en_attente (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nom TEXT DEFAULT '',
        email TEXT DEFAULT '',
        contenu TEXT NOT NULL,
        type_soin TEXT DEFAULT '',
        statut TEXT DEFAULT 'en_attente',  -- en_attente | valide | refuse
        ip TEXT DEFAULT '',
        cree_le TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS etudes_cas (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        titre TEXT NOT NULL,
        slug TEXT UNIQUE NOT NULL,
        extrait TEXT DEFAULT '',
        contenu TEXT DEFAULT '',
        image_id INTEGER REFERENCES medias(id) ON DELETE SET NULL,
        statut TEXT DEFAULT 'brouillon',
        meta_titre TEXT DEFAULT '',
        meta_desc TEXT DEFAULT '',
        cree_le TEXT DEFAULT (datetime('now')),
        modifie_le TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS galeries (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nom TEXT NOT NULL,
        slug TEXT UNIQUE NOT NULL,
        description TEXT DEFAULT '',
        cree_le TEXT DEFAULT (datetime('now'))
    );

    CREATE TABLE IF NOT EXISTS galerie_medias (
        galerie_id INTEGER REFERENCES galeries(id) ON DELETE CASCADE,
        media_id INTEGER REFERENCES medias(id) ON DELETE CASCADE,
        position INTEGER DEFAULT 0,
        PRIMARY KEY (galerie_id, media_id)
    );

    CREATE TABLE IF NOT EXISTS slides (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        titre TEXT DEFAULT '',
        sous_titre TEXT DEFAULT '',
        media_id INTEGER REFERENCES medias(id) ON DELETE SET NULL,
        lien TEXT DEFAULT '',
        position INTEGER DEFAULT 0,
        actif INTEGER DEFAULT 1
    );
    ");
}

// Crée l'utilisateur admin s'il n'existe pas
function ensure_admin(string $login, string $pass): void {
    $db = db();
    $st = $db->prepare('SELECT COUNT(*) FROM utilisateurs WHERE login = ?');
    $st->execute([$login]);
    if ((int)$st->fetchColumn() === 0) {
        $ins = $db->prepare('INSERT INTO utilisateurs (login, mot_de_passe, nom) VALUES (?,?,?)');
        $ins->execute([$login, password_hash($pass, PASSWORD_DEFAULT), 'Hérald Loygue']);
    }
}
