<?php
// ============================================================
// config.php — configuration centrale du site et du back-office.
// ============================================================
declare(strict_types=1);

define('SITE_NAME', 'Tuina Loygue');
define('SITE_URL',  'https://tuinaloygue.fr');

// ============================================================
// Notifications e-mail du formulaire de contact
// ============================================================
// Destinataires et adresse de réponse : gérés depuis l'admin (table reglages).
// Les valeurs ci-dessous ne servent que de REPLI si la table est vide/absente.
define('CONTACT_EMAILS_DEFAUT', ['e.guenver@gmail.com', 'tuinaloygue@gmail.com']);
define('CONTACT_REPLY_TO_DEFAUT', 'tuinaloygue@gmail.com');
define('CONTACT_FROM', 'contact@tuinaloygue.fr');
// En-tête affiché en haut des e-mails de confirmation automatiques
define('CONFIRMATION_ENTETE',
    "--- Confirmation automatique ---\n" .
    "Ceci est une confirmation automatique : elle vous assure simplement\n" .
    "que votre message nous est bien parvenu. Nous le lisons ensuite\n" .
    "personnellement.\n" .
    "---\n\n");

// Envoie une notification aux destinataires. Retourne true si >=1 envoi OK.
function envoyer_notif_contact(string $nom, string $email, string $message): bool {
    $sujet = '[Site Tuina] Nouveau message de ' . $nom;
    $corps =
        "Nouveau message reçu via le formulaire de contact du site.\n\n" .
        "Nom    : $nom\n" .
        "E-mail : $email\n" .
        "Date   : " . date('d/m/Y H:i') . "\n\n" .
        "Message :\n" . $message . "\n\n" .
        "—\n" .
        "Pour répondre, écrivez directement à l'adresse ci-dessus.\n" .
        "Tous les messages restent consultables dans l'administration : " .
        SITE_URL . "/admin/messages.php\n";
    $from = CONTACT_FROM;
    $headers = [];
    $headers[] = 'From: ' . SITE_NAME . ' <' . $from . '>';
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $headers[] = 'Reply-To: ' . $nom . ' <' . $email . '>';
    }
    $headers[] = 'Content-Type: text/plain; charset=UTF-8';
    $headers[] = 'X-Mailer: PHP/Tuina';
    $hstr = implode("\r\n", $headers);
    $sujet_enc = '=?UTF-8?B?' . base64_encode($sujet) . '?=';
    $ok = false;
    foreach (contact_emails() as $dest) {
        if (@mail($dest, $sujet_enc, $corps, $hstr, '-f' . $from)) $ok = true;
    }
    return $ok;
}

// ------------------------------------------------------------
// Notification interne : nouveau témoignage en attente de modération
// ------------------------------------------------------------
function envoyer_notif_temoignage(string $nom, string $email, string $contenu, string $typeSoin = ''): bool {
    $nomAff = $nom !== '' ? $nom : 'Anonyme';
    $sujet = '[Site Tuina] Nouveau témoignage à modérer';
    $corps =
        "Un visiteur a proposé un témoignage. Il est en attente de modération.\n\n" .
        "Nom        : $nomAff\n" .
        "E-mail     : " . ($email !== '' ? $email : '(non renseigné)') . "\n" .
        ($typeSoin !== '' ? "Type de soin: $typeSoin\n" : '') .
        "Date       : " . date('d/m/Y H:i') . "\n\n" .
        "Témoignage :\n" . $contenu . "\n\n" .
        "—\n" .
        "À valider ou refuser dans l'administration : " . SITE_URL . "/admin/moderation.php\n";
    $from = CONTACT_FROM;
    $headers = [];
    $headers[] = 'From: ' . SITE_NAME . ' <' . $from . '>';
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $headers[] = 'Reply-To: ' . $nomAff . ' <' . $email . '>';
    }
    $headers[] = 'Content-Type: text/plain; charset=UTF-8';
    $headers[] = 'X-Mailer: PHP/Tuina';
    $hstr = implode("\r\n", $headers);
    $sujet_enc = '=?UTF-8?B?' . base64_encode($sujet) . '?=';
    $ok = false;
    foreach (contact_emails() as $dest) {
        if (@mail($dest, $sujet_enc, $corps, $hstr, '-f' . $from)) $ok = true;
    }
    return $ok;
}

// ------------------------------------------------------------
// Confirmation envoyée au visiteur (accusé de réception)
// $type = 'contact' | 'temoignage'. N'envoie rien si l'e-mail est vide/invalide.
// ------------------------------------------------------------
function envoyer_confirmation_visiteur(string $email, string $nom, string $type): bool {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) return false;
    $prenom = $nom !== '' ? $nom : 'Bonjour';
    $salut  = $nom !== '' ? "Bonjour $nom," : 'Bonjour,';

    if ($type === 'temoignage') {
        $sujet = 'Merci pour votre témoignage — Tuina Loygue';
        $corps =
            CONFIRMATION_ENTETE .
            "$salut\n\n" .
            "Nous avons bien reçu votre témoignage et nous vous en remercions.\n" .
            "Il sera lu par le praticien avant d'être éventuellement publié sur le site : " .
            "il n'apparaît jamais automatiquement.\n\n" .
            "Vous n'avez rien d'autre à faire.\n\n" .
            "Avec toute notre reconnaissance,\n" .
            SITE_NAME . "\n" .
            "12 rue Laplace, 14000 Caen — 02.31.96.62.62\n";
    } else { // contact
        $sujet = 'Nous avons bien reçu votre message — Tuina Loygue';
        $corps =
            CONFIRMATION_ENTETE .
            "$salut\n\n" .
            "Nous confirmons la bonne réception de votre message. " .
            "Nous vous répondrons dès que possible.\n\n" .
            "Rappel : les rendez-vous se prennent uniquement par téléphone, " .
            "aux heures de permanence, au 02.31.96.62.62.\n\n" .
            "Bien à vous,\n" .
            SITE_NAME . "\n" .
            "12 rue Laplace, 14000 Caen\n";
    }
    $from = CONTACT_FROM;
    $headers = [];
    $headers[] = 'From: ' . SITE_NAME . ' <' . $from . '>';
    $headers[] = 'Reply-To: ' . SITE_NAME . ' <' . contact_reply_to() . '>';
    $headers[] = 'Content-Type: text/plain; charset=UTF-8';
    $headers[] = 'X-Mailer: PHP/Tuina';
    $hstr = implode("\r\n", $headers);
    $sujet_enc = '=?UTF-8?B?' . base64_encode($sujet) . '?=';
    return (bool)@mail($email, $sujet_enc, $corps, $hstr, '-f' . $from);
}
define('ROOT_DIR',   dirname(__DIR__));          // racine du site
define('DATA_DIR',   ROOT_DIR . '/data');        // base SQLite (hors web idéalement)
define('MEDIAS_DIR', ROOT_DIR . '/medias');      // fichiers images
define('MEDIAS_URL', SITE_URL . '/medias');

define('DB_PATH', DATA_DIR . '/tuina.sqlite');

// Connexion PDO SQLite (singleton)
function db(): PDO {
    static $pdo = null;
    if ($pdo === null) {
        $pdo = new PDO('sqlite:' . DB_PATH);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
        $pdo->exec('PRAGMA foreign_keys = ON');
        $pdo->exec('PRAGMA journal_mode = WAL');
    }
    return $pdo;
}

// Petit helper d'échappement HTML
function e(?string $s): string { return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); }

// Slugify
function slugify(string $s): string {
    $s = mb_strtolower(trim($s), 'UTF-8');
    $s = strtr($s, [
        'à'=>'a','â'=>'a','ä'=>'a','é'=>'e','è'=>'e','ê'=>'e','ë'=>'e',
        'î'=>'i','ï'=>'i','ô'=>'o','ö'=>'o','ù'=>'u','û'=>'u','ü'=>'u','ç'=>'c',
    ]);
    $s = preg_replace('/[^a-z0-9]+/', '-', $s);
    return trim($s, '-') ?: 'item';
}

// ============================================================
// Réglages clé/valeur (table « reglages ») — modifiables en admin
// ============================================================
function reglage_get(string $cle, ?string $defaut = null): ?string {
    static $cache = [];
    if (array_key_exists($cle, $cache)) return $cache[$cle];
    try {
        $st = db()->prepare('SELECT valeur FROM reglages WHERE cle = ?');
        $st->execute([$cle]);
        $v = $st->fetchColumn();
        return $cache[$cle] = ($v !== false ? (string)$v : $defaut);
    } catch (Exception $e) {
        return $defaut;
    }
}

function reglage_set(string $cle, string $valeur): void {
    db()->prepare('INSERT INTO reglages (cle, valeur) VALUES (?, ?)
                   ON CONFLICT(cle) DO UPDATE SET valeur = excluded.valeur')
        ->execute([$cle, $valeur]);
}

// Liste des destinataires des notifications (formulaire + témoignages).
function contact_emails(): array {
    $json = reglage_get('contact_emails');
    if ($json !== null && $json !== '') {
        $arr = json_decode($json, true);
        if (is_array($arr)) {
            $arr = array_values(array_filter(array_map('trim', $arr),
                fn($m) => filter_var($m, FILTER_VALIDATE_EMAIL)));
            if ($arr) return $arr;
        }
    }
    return CONTACT_EMAILS_DEFAUT;
}

// Adresse de réponse (Reply-To) des e-mails de confirmation aux visiteurs.
function contact_reply_to(): string {
    $v = reglage_get('contact_reply_to');
    return ($v && filter_var($v, FILTER_VALIDATE_EMAIL)) ? $v : CONTACT_REPLY_TO_DEFAUT;
}
