<?php
// ============================================
// SEN RDV SANTÉ+ — Connexion utilisateur
// POST /api/auth/login.php
// Body: { "telephone": "771234567", "mot_de_passe": "1234" }
// ============================================
require_once '../config/helpers.php';
require_once '../config/database.php';

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

$body = getBody();
validerChamps($body, ['telephone', 'mot_de_passe']);

$db = getDB();

// je cherche l'utilisateur par téléphone
$stmt = $db->prepare("
    SELECT id, nom, prenom, telephone, role, mot_de_passe, hopital_id, service_id, actif
    FROM utilisateurs
    WHERE telephone = ?
");
$stmt->execute([$body['telephone']]);
$user = $stmt->fetch();

if (!$user) {
    repondre(['erreur' => 'Téléphone ou mot de passe incorrect'], 401);
}

// je vérifie le mot de passe — support bcrypt ET sha256 (migration)
$mdpValide = false;
if (str_starts_with($user['mot_de_passe'], '$2y$')) {
    // hash bcrypt (nouveaux comptes ou après réinitialisation)
    $mdpValide = password_verify($body['mot_de_passe'], $user['mot_de_passe']);
} else {
    // hash sha256 (anciens comptes)
    $mdpValide = ($user['mot_de_passe'] === hash('sha256', $body['mot_de_passe']));
    // je migre vers bcrypt à la volée
    if ($mdpValide) {
        $nouveauHash = password_hash($body['mot_de_passe'], PASSWORD_DEFAULT);
        $db->prepare("UPDATE utilisateurs SET mot_de_passe = ? WHERE id = ?")
           ->execute([$nouveauHash, $user['id']]);
    }
}

if (!$mdpValide) {
    repondre(['erreur' => 'Téléphone ou mot de passe incorrect'], 401);
}

if (!$user['actif']) {
    repondre(['erreur' => 'Compte désactivé, contactez l\'administration'], 403);
}

// je génère un token valable 30 jours
$token    = genererToken();
$expireAt = date('Y-m-d H:i:s', strtotime('+30 days'));

// je supprime les anciens tokens de cet utilisateur
$db->prepare("DELETE FROM tokens_api WHERE utilisateur_id = ?")->execute([$user['id']]);

// je sauvegarde le nouveau token
$db->prepare("INSERT INTO tokens_api (utilisateur_id, token, expire_at) VALUES (?, ?, ?)")
   ->execute([$user['id'], $token, $expireAt]);

// je réponds avec les infos + token
repondre([
    'succes' => true,
    'token'  => $token,
    'user'   => [
        'id'         => $user['id'],
        'nom'        => $user['nom'],
        'prenom'     => $user['prenom'],
        'telephone'  => $user['telephone'],
        'role'       => $user['role'],
        'hopital_id' => $user['hopital_id'],
        'service_id' => $user['service_id'],
    ]
]);