<?php
// ============================================
// SEN RDV SANTÉ+ — Gestion des publicités
// GET    → toutes les pubs actives (app mobile)
// POST   → créer une pub (super admin)
// PUT    → modifier une pub (super admin)
// DELETE → désactiver une pub (super admin)
// ============================================
require_once '../config/helpers.php';
require_once '../config/database.php';

$db     = getDB();
$method = $_SERVER['REQUEST_METHOD'];

// ── GET : toutes les pubs actives ──
if ($method === 'GET') {
    $stmt = $db->query("
        SELECT * FROM publicites
        WHERE actif = 1
          AND (date_debut IS NULL OR date_debut <= CURDATE())
          AND (date_fin   IS NULL OR date_fin   >= CURDATE())
        ORDER BY ordre ASC, id ASC
    ");
    $pubs = $stmt->fetchAll();
    repondre(['succes' => true, 'pubs' => $pubs]);
}

// ── POST : créer une nouvelle pub ──
if ($method === 'POST') {
    $userConnecte = verifierToken();
    if ($userConnecte['role'] !== 'super_admin') {
        repondre(['erreur' => 'Accès réservé au Super Admin'], 403);
    }

    $isMultipart = isset($_SERVER['CONTENT_TYPE']) &&
                   str_contains($_SERVER['CONTENT_TYPE'], 'multipart/form-data');
    $body = $isMultipart ? $_POST : getBody();

    if (empty($body['titre'])) {
        repondre(['erreur' => 'Champs manquants : titre'], 422);
    }

    // gestion upload image
    $image_url = $body['image_url'] ?? null;
    if (isset($_FILES['image']) && $_FILES['image']['error'] === UPLOAD_ERR_OK) {
        $ext    = strtolower(pathinfo($_FILES['image']['name'], PATHINFO_EXTENSION));
        $extsOk = ['jpg','jpeg','png','gif','webp'];
        if (!in_array($ext, $extsOk)) repondre(['erreur' => 'Format non supporté'], 400);
        if ($_FILES['image']['size'] > 2 * 1024 * 1024) repondre(['erreur' => 'Image max 2 Mo'], 400);
        $dossier = __DIR__ . '/../../uploads/pub/';
        if (!is_dir($dossier)) mkdir($dossier, 0755, true);
        $nomFichier = 'pub_' . time() . '_' . uniqid() . '.' . $ext;
        move_uploaded_file($_FILES['image']['tmp_name'], $dossier . $nomFichier);
        $protocol  = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
        $image_url = $protocol . '://' . $_SERVER['HTTP_HOST'] . '/uploads/pub/' . $nomFichier;
    }

    $stmt = $db->prepare("
        INSERT INTO publicites
            (titre, message, image_url, lien, couleur_fond, couleur_texte, emoji,
             format, cta_texte, cta_action, ordre, date_debut, date_fin, actif)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 1)
    ");
    $stmt->execute([
        trim($body['titre']),
        $body['message']       ?? null,
        $image_url,
        !empty($body['lien'])       ? $body['lien']       : null,
        $body['couleur_fond']       ?? '#0055AA',
        $body['couleur_texte']      ?? '#FFFFFF',
        $body['emoji']              ?? null,
        $body['format']             ?? 'texte',
        $body['cta_texte']          ?? null,
        $body['cta_action']         ?? null,
        intval($body['ordre']       ?? 0),
        !empty($body['date_debut']) ? $body['date_debut'] : null,
        !empty($body['date_fin'])   ? $body['date_fin']   : null,
    ]);

    repondre(['succes' => true, 'message' => 'Publicité créée', 'id' => $db->lastInsertId()]);
}

// ── PUT : modifier une pub existante ──
if ($method === 'PUT') {
    $userConnecte = verifierToken();
    if ($userConnecte['role'] !== 'super_admin') {
        repondre(['erreur' => 'Accès réservé au Super Admin'], 403);
    }

    $body = getBody();
    if (empty($body['id'])) repondre(['erreur' => 'id obligatoire'], 422);

    $champs = [];
    $params = [];

    $colonnes = ['titre','message','image_url','lien','couleur_fond','couleur_texte',
                 'emoji','format','cta_texte','cta_action','ordre','date_debut','date_fin','actif'];
    foreach ($colonnes as $col) {
        if (array_key_exists($col, $body)) {
            $champs[] = "$col = ?";
            $params[] = $body[$col] === '' ? null : $body[$col];
        }
    }

    if (empty($champs)) repondre(['erreur' => 'Aucun champ à modifier'], 422);

    $params[] = $body['id'];
    $stmt = $db->prepare("UPDATE publicites SET " . implode(', ', $champs) . " WHERE id = ?");
    $stmt->execute($params);

    repondre(['succes' => true, 'message' => 'Publicité modifiée']);
}

// ── DELETE : désactiver une pub ──
if ($method === 'DELETE') {
    $userConnecte = verifierToken();
    if ($userConnecte['role'] !== 'super_admin') {
        repondre(['erreur' => 'Accès réservé au Super Admin'], 403);
    }

    $body = getBody();
    if (!empty($body['id'])) {
        // désactiver une pub spécifique
        $stmt = $db->prepare("UPDATE publicites SET actif = 0 WHERE id = ?");
        $stmt->execute([$body['id']]);
        repondre(['succes' => true, 'message' => 'Publicité désactivée']);
    } else {
        // désactiver toutes
        $db->exec("UPDATE publicites SET actif = 0");
        repondre(['succes' => true, 'message' => 'Toutes les publicités désactivées']);
    }
}

repondre(['erreur' => 'Méthode non autorisée'], 405);