<?php
// ============================================
// SEN RDV SANTÉ+ — Gestion utilisateurs (Super Admin)
// GET    /api/admin/utilisateurs.php           → liste tous les admins/gérants
// POST   /api/admin/utilisateurs.php           → créer un admin hôpital
// PUT    /api/admin/utilisateurs.php           → modifier un utilisateur
// DELETE /api/admin/utilisateurs.php?id=1      → désactiver
// ============================================

require_once '../config/database.php';
require_once '../config/helpers.php';

$userConnecte = verifierToken();

if ($userConnecte['role'] !== 'super_admin') {
    repondre(['erreur' => 'Accès réservé au Super Admin'], 403);
}

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

// ---- GET : liste de tous les admins hôpitaux ----
if ($method === 'GET') {
    $stmt = $db->prepare("
        SELECT u.id, u.nom, u.prenom, u.telephone, u.email, u.role, u.actif,
               u.hopital_id, u.service_id,
               h.nom AS hopital_nom,
               s.nom AS service_nom
        FROM utilisateurs u
        LEFT JOIN hopitaux h ON h.id = u.hopital_id
        LEFT JOIN services s ON s.id = u.service_id
        WHERE u.role IN ('admin_hopital', 'gerant')
        ORDER BY u.role ASC, h.nom ASC, u.nom ASC
    ");
    $stmt->execute();
    repondre(['succes' => true, 'utilisateurs' => $stmt->fetchAll()]);
}

// ---- POST : créer un admin hôpital ----
if ($method === 'POST') {
    $body = getBody();
    validerChamps($body, ['nom', 'prenom', 'telephone', 'mot_de_passe', 'role', 'hopital_id']);

    if (!in_array($body['role'], ['admin_hopital', 'gerant'])) {
        repondre(['erreur' => 'Rôle invalide'], 422);
    }

    // je vérifie que le numéro n'est pas déjà utilisé
    $stmt = $db->prepare("SELECT id FROM utilisateurs WHERE telephone = ?");
    $stmt->execute([$body['telephone']]);
    if ($stmt->fetch()) {
        repondre(['erreur' => 'Ce numéro de téléphone est déjà utilisé'], 409);
    }

    // je vérifie que l'hôpital existe
    $stmt = $db->prepare("SELECT id, nom FROM hopitaux WHERE id = ?");
    $stmt->execute([$body['hopital_id']]);
    $hopital = $stmt->fetch();
    if (!$hopital) {
        repondre(['erreur' => 'Hôpital introuvable'], 404);
    }

    $stmt = $db->prepare("
        INSERT INTO utilisateurs (hopital_id, service_id, nom, prenom, telephone, email, mot_de_passe, role)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?)
    ");
    $stmt->execute([
        $body['hopital_id'],
        $body['service_id'] ?? null,
        trim($body['nom']),
        trim($body['prenom']),
        $body['telephone'],
        $body['email'] ?? null,
        hash('sha256', $body['mot_de_passe']),
        $body['role'],
    ]);

    repondre([
        'succes'  => true,
        'message' => 'Compte ' . $body['role'] . ' créé et affecté à ' . $hopital['nom'],
        'id'      => $db->lastInsertId()
    ], 201);
}

// ---- PUT : modifier un utilisateur ou mettre à jour le profil ----
if ($method === 'PUT') {
    $body = getBody();
    validerChamps($body, ['id']);

    $stmt = $db->prepare("SELECT id FROM utilisateurs WHERE id = ?");
    $stmt->execute([$body['id']]);
    if (!$stmt->fetch()) {
        repondre(['erreur' => 'Utilisateur introuvable'], 404);
    }

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

    if (!empty($body['nom']))        { $champs[] = 'nom = ?';        $params[] = trim($body['nom']); }
    if (!empty($body['prenom']))     { $champs[] = 'prenom = ?';     $params[] = trim($body['prenom']); }
    if (!empty($body['telephone']))  { $champs[] = 'telephone = ?';  $params[] = $body['telephone']; }
    if (!empty($body['email']))      { $champs[] = 'email = ?';      $params[] = $body['email']; }
    if (!empty($body['hopital_id'])) { $champs[] = 'hopital_id = ?'; $params[] = $body['hopital_id']; }
    if (!empty($body['service_id'])) { $champs[] = 'service_id = ?'; $params[] = $body['service_id']; }
    if (isset($body['actif']))       { $champs[] = 'actif = ?';      $params[] = $body['actif'] ? 1 : 0; }
    if (!empty($body['mot_de_passe'])) {
        $champs[] = 'mot_de_passe = ?';
        $params[] = hash('sha256', $body['mot_de_passe']);
    }

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

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

    repondre(['succes' => true, 'message' => 'Utilisateur mis à jour']);
}

// ---- DELETE : désactiver ----
if ($method === 'DELETE') {
    if (empty($_GET['id'])) {
        repondre(['erreur' => 'id obligatoire'], 422);
    }

    $stmt = $db->prepare("UPDATE utilisateurs SET actif = 0 WHERE id = ?");
    $stmt->execute([$_GET['id']]);

    $stmt = $db->prepare("DELETE FROM tokens_api WHERE utilisateur_id = ?");
    $stmt->execute([$_GET['id']]);

    repondre(['succes' => true, 'message' => 'Compte désactivé']);
}

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