<?php
// ============================================
// SEN RDV SANTÉ+ — Profil utilisateur connecté
// GET /api/auth/profil.php           → voir son profil
// PUT /api/auth/profil.php           → mettre à jour son profil
// ============================================

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

$userConnecte = verifierToken();
$db = getDB();

// ---- GET : récupérer le profil complet ----
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $stmt = $db->prepare("
        SELECT u.id, u.nom, u.prenom, u.telephone, u.email, u.role, u.actif,
               h.id AS hopital_id, h.nom AS hopital_nom,
               h.adresse AS hopital_adresse, h.telephone AS hopital_telephone,
               s.id AS service_id, s.nom AS service_nom,
               s.quota_rdv_jour, s.duree_consultation
        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.id = ?
    ");
    $stmt->execute([$userConnecte['utilisateur_id']]);
    $profil = $stmt->fetch();

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

    repondre(['succes' => true, 'profil' => $profil]);
}

// ---- PUT : mettre à jour son propre profil ----
if ($_SERVER['REQUEST_METHOD'] === 'PUT') {
    $body = getBody();

    $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['email']))  { $champs[] = 'email = ?';  $params[] = $body['email']; }

    // je vérifie que le nouveau téléphone n'est pas déjà pris
    if (!empty($body['telephone'])) {
        $stmt = $db->prepare("SELECT id FROM utilisateurs WHERE telephone = ? AND id != ?");
        $stmt->execute([$body['telephone'], $userConnecte['utilisateur_id']]);
        if ($stmt->fetch()) {
            repondre(['erreur' => 'Ce numéro est déjà utilisé par un autre compte'], 409);
        }
        $champs[] = 'telephone = ?';
        $params[] = $body['telephone'];
    }

    // je vérifie l'ancien mot de passe avant d'autoriser le changement
    if (!empty($body['nouveau_mot_de_passe'])) {
        if (empty($body['ancien_mot_de_passe'])) {
            repondre(['erreur' => 'L\'ancien mot de passe est requis'], 422);
        }

        $stmt = $db->prepare("SELECT mot_de_passe FROM utilisateurs WHERE id = ?");
        $stmt->execute([$userConnecte['utilisateur_id']]);
        $user = $stmt->fetch();

        if ($user['mot_de_passe'] !== hash('sha256', $body['ancien_mot_de_passe'])) {
            repondre(['erreur' => 'Ancien mot de passe incorrect'], 401);
        }

        $champs[] = 'mot_de_passe = ?';
        $params[] = hash('sha256', $body['nouveau_mot_de_passe']);
    }

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

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

    repondre(['succes' => true, 'message' => 'Profil mis à jour avec succès']);
}

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