<?php
// ============================================
// api/rdv/confirmer_plage.php
// POST — confirme tous les RDVs dans une plage horaire
// ============================================
require_once '../config/helpers.php';
require_once '../config/database.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') repondre(['erreur' => 'Méthode non autorisée'], 405);

$userConnecte = verifierToken();
if (!in_array($userConnecte['role'], ['gerant','admin_hopital'])) {
    repondre(['erreur' => 'Accès non autorisé'], 403);
}

$db   = getDB();
$body = getBody();
validerChamps($body, ['date', 'heure_debut', 'heure_fin']);

$date      = $body['date'];
$debut     = $body['heure_debut'];
$fin       = $body['heure_fin'];
$serviceId = $body['service_id'] ?? $userConnecte['service_id'];
$expireAt  = date('Y-m-d H:i:s', strtotime('+3 hours'));

// je récupère tous les RDVs en attente dans cette plage
$stmt = $db->prepare("
    SELECT r.id, r.patient_id, r.patient_telephone, r.heure_rdv, s.nom AS service_nom
    FROM rendez_vous r
    JOIN services s ON s.id = r.service_id
    WHERE r.date_rdv = ?
      AND r.heure_rdv >= ?
      AND r.heure_rdv <= ?
      AND r.statut = 'en_attente'
      AND (r.service_id = ? OR s.hopital_id = ?)
    ORDER BY r.heure_rdv ASC
");
$stmt->execute([$date, $debut . ':00', $fin . ':00', $serviceId, $userConnecte['hopital_id']]);
$rdvs = $stmt->fetchAll();

if (empty($rdvs)) {
    repondre(['succes' => true, 'confirmes' => 0, 'message' => 'Aucun RDV en attente dans cette plage']);
}

$confirmes = 0;

foreach ($rdvs as $rdv) {
    // confirmation
    $db->prepare("UPDATE rendez_vous SET statut = 'confirme' WHERE id = ?")
       ->execute([$rdv['id']]);

    // paiement
    $db->prepare("INSERT INTO paiements (rdv_id, montant, operateur, telephone_paiement, expire_at) VALUES (?, 2500.00, 'wave', ?, ?)")
       ->execute([$rdv['id'], $rdv['patient_telephone'], $expireAt]);

    // notification SMS
    $heure = substr($rdv['heure_rdv'], 0, 5);
    $msg   = "SEN RDV SANTÉ+ : Votre RDV du {$date} à {$heure} ({$rdv['service_nom']}) est confirmé. Payez via Mobile Money pour votre ticket prioritaire. Expire dans 3h.";
    $db->prepare("INSERT INTO notifications (utilisateur_id, rdv_id, type, canal, message) VALUES (?, ?, 'confirmation', 'sms', ?)")
       ->execute([$rdv['patient_id'], $rdv['id'], $msg]);

    // log audit
    $db->prepare("INSERT INTO audit_log (utilisateur_id, action, table_cible, enregistrement_id, details) VALUES (?, 'confirmer_plage', 'rendez_vous', ?, ?)")
       ->execute([$userConnecte['utilisateur_id'], $rdv['id'], json_encode(['date' => $date, 'plage' => "$debut-$fin"])]);

    $confirmes++;
}

repondre([
    'succes'    => true,
    'confirmes' => $confirmes,
    'message'   => "$confirmes RDV(s) confirmés dans la plage $debut - $fin",
    'plage'     => ['date' => $date, 'debut' => $debut, 'fin' => $fin],
]);