<?php
// ============================================
// SEN RDV SANTÉ+ — Confirmer plusieurs RDVs en masse
// POST /api/rdv/confirmer_masse.php
// Body: { "rdv_ids": [1, 2, 3] }
// ============================================

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();

if (empty($body['rdv_ids']) || !is_array($body['rdv_ids'])) {
    repondre(['erreur' => 'rdv_ids obligatoire (tableau)'], 422);
}

$ids             = array_map('intval', $body['rdv_ids']);
$prixReservation = (float) getParametre('prix_reservation', 200);
$confirmes       = 0;
$expireAt        = date('Y-m-d H:i:s', strtotime('+3 hours'));

foreach ($ids as $rdvId) {

    // je vérifie que le RDV est en attente et appartient aux services du gérant
    if ($userConnecte['role'] === 'gerant') {
        $serviceIds   = $userConnecte['service_ids'] ?? [];
        if (empty($serviceIds)) continue;
        $placeholders = implode(',', array_fill(0, count($serviceIds), '?'));
        $stmt = $db->prepare("
            SELECT r.id, r.patient_id, r.patient_telephone, r.date_rdv, r.heure_rdv,
                   s.nom AS service_nom
            FROM rendez_vous r
            JOIN services s ON s.id = r.service_id
            WHERE r.id = ?
              AND r.statut = 'en_attente'
              AND r.service_id IN ($placeholders)
        ");
        $stmt->execute(array_merge([$rdvId], $serviceIds));
    } else {
        // admin_hopital → tous les services de son hôpital
        $stmt = $db->prepare("
            SELECT r.id, r.patient_id, r.patient_telephone, r.date_rdv, r.heure_rdv,
                   s.nom AS service_nom
            FROM rendez_vous r
            JOIN services s ON s.id = r.service_id
            WHERE r.id = ?
              AND r.statut = 'en_attente'
              AND s.hopital_id = ?
        ");
        $stmt->execute([$rdvId, $userConnecte['hopital_id']]);
    }

    $rdv = $stmt->fetch(PDO::FETCH_ASSOC);
    if (!$rdv) continue;

    // je confirme le RDV
    $db->prepare("UPDATE rendez_vous SET statut = 'confirme' WHERE id = ?")
       ->execute([$rdvId]);

    // je crée le paiement avec le prix depuis les paramètres
    $db->prepare("
        INSERT INTO paiements (rdv_id, montant, operateur, telephone_paiement, expire_at)
        VALUES (?, ?, 'wave', ?, ?)
    ")->execute([$rdvId, $prixReservation, $rdv['patient_telephone'], $expireAt]);

    // je notifie le patient
    $heure = substr($rdv['heure_rdv'], 0, 5);
    $msg   = "SEN RDV SANTÉ+ : Votre RDV du {$rdv['date_rdv']} à {$heure} ({$rdv['service_nom']}) est confirmé. Payez {$prixReservation} FCFA via Mobile Money. Expire dans 3h.";
    $db->prepare("
        INSERT INTO notifications (utilisateur_id, rdv_id, type, canal, message)
        VALUES (?, ?, 'confirmation', 'sms', ?)
    ")->execute([$rdv['patient_id'], $rdvId, $msg]);

    $confirmes++;
}

repondre([
    'succes'    => true,
    'confirmes' => $confirmes,
    'message'   => "{$confirmes} RDV(s) confirmé(s) avec succès",
]);