<?php
// ============================================
// SEN RDV SANTÉ+ — S'abonner à une alerte de disponibilité
// POST /api/alertes/creer.php
// Headers: Authorization: Bearer {token patient}
// Body: {
//   "service_id": 1,
//   "perimetre": "hopital_specifique",  // ou "zone_geo"
//   "rayon_km": 10                      // uniquement si zone_geo
// }
// ============================================

require_once '../config/helpers.php';   // ← TOUJOURS en premier
require_once '../config/database.php';

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

$userConnecte = verifierToken();

if ($userConnecte['role'] !== 'patient') {
    repondre(['erreur' => 'Seuls les patients peuvent créer des alertes'], 403);
}

$body = getBody();
validerChamps($body, ['service_id', 'perimetre']);

if (!in_array($body['perimetre'], ['hopital_specifique', 'zone_geo'])) {
    repondre(['erreur' => 'Périmètre invalide — utilisez hopital_specifique ou zone_geo'], 422);
}

if ($body['perimetre'] === 'zone_geo' && empty($body['rayon_km'])) {
    repondre(['erreur' => 'Le rayon en km est obligatoire pour une alerte par zone'], 422);
}

$db = getDB();

// je vérifie que le service existe
$stmt = $db->prepare("SELECT id, nom FROM services WHERE id = ? AND actif = 1");
$stmt->execute([$body['service_id']]);
$service = $stmt->fetch();

if (!$service) {
    repondre(['erreur' => 'Service introuvable'], 404);
}

// je vérifie que ce patient n'a pas déjà une alerte active pour ce service
$stmt = $db->prepare("
    SELECT id FROM alertes_disponibilite
    WHERE patient_id = ? AND service_id = ? AND actif = 1
");
$stmt->execute([$userConnecte['utilisateur_id'], $body['service_id']]);

if ($stmt->fetch()) {
    repondre(['erreur' => 'Vous avez déjà une alerte active pour ce service'], 409);
}

$stmt = $db->prepare("
    INSERT INTO alertes_disponibilite (patient_id, service_id, perimetre, rayon_km)
    VALUES (?, ?, ?, ?)
");
$stmt->execute([
    $userConnecte['utilisateur_id'],
    $body['service_id'],
    $body['perimetre'],
    $body['rayon_km'] ?? null
]);

repondre([
    'succes'  => true,
    'message' => "Alerte activée — vous serez notifié dès qu'une place se libère en " . $service['nom'],
    'alerte'  => [
        'id'        => $db->lastInsertId(),
        'service'   => $service['nom'],
        'perimetre' => $body['perimetre'],
        'rayon_km'  => $body['rayon_km'] ?? null,
    ]
], 201);