<?php
// ============================================
// SEN RDV SANTÉ+ — Purger l'historique des RDVs
// POST /api/admin/purger_historique.php
// Body: { "mois": 6 }  → supprime RDVs terminés/annulés/expirés de + de 6 mois
// Headers: Authorization: Bearer {token admin ou directeur}
// ============================================
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'], ['admin_hopital', 'directeur_regional', 'super_admin'])) {
    repondre(['erreur' => 'Accès non autorisé'], 403);
}

$db = getDB();
$body = getBody();

$mois = isset($body['mois']) ? (int)$body['mois'] : 6;
if ($mois < 1 || $mois > 24) {
    repondre(['erreur' => 'Le nombre de mois doit être entre 1 et 24'], 422);
}

$dateLimite = date('Y-m-d', strtotime("-{$mois} months"));

// Restreindre à l'hôpital si admin_hopital
$filtreHopital = '';
$params = [$dateLimite];

if ($userConnecte['role'] === 'admin_hopital') {
    $filtreHopital = "AND s.hopital_id = ?";
    $params[] = $userConnecte['hopital_id'];
}

// Supprimer les RDVs anciens qui sont terminés, annulés ou expirés
$stmt = $db->prepare("
    DELETE r FROM rendez_vous r
    JOIN services s ON s.id = r.service_id
    WHERE r.date_rdv < ?
      AND r.statut IN ('consomme', 'annule', 'expire')
      $filtreHopital
");
$stmt->execute($params);
$nbSupprimes = $stmt->rowCount();

// Supprimer aussi les tickets et paiements orphelins
$db->prepare("
    DELETE t FROM tickets t
    LEFT JOIN rendez_vous r ON r.id = t.rdv_id
    WHERE r.id IS NULL
")->execute();

$db->prepare("
    DELETE p FROM paiements p
    LEFT JOIN rendez_vous r ON r.id = p.rdv_id
    WHERE r.id IS NULL
")->execute();

$db->prepare("
    DELETE n FROM notifications n
    LEFT JOIN rendez_vous r ON r.id = n.rdv_id
    WHERE r.id IS NULL AND n.rdv_id IS NOT NULL
")->execute();

// Audit log
$db->prepare("
    INSERT INTO audit_log (utilisateur_id, action, table_cible, details)
    VALUES (?, 'purger_historique', 'rendez_vous', ?)
")->execute([
    $userConnecte['utilisateur_id'],
    json_encode(['mois' => $mois, 'date_limite' => $dateLimite, 'supprimes' => $nbSupprimes]),
]);

repondre([
    'succes'    => true,
    'message'   => "{$nbSupprimes} RDV(s) supprimé(s) (plus de {$mois} mois)",
    'supprimes' => $nbSupprimes,
]);