<?php
/**
 * Projet                    : MageStock
 * Logiciel                  : MageStock
 * Fichier                   : api/password-recovery.php
 * Rôle                      : API administrateur de création des jetons temporaires de récupération.
 * Auteur                    : Régis KREMER
 * Version du fichier        : 1.0.0
 * Version générale          : 2.6.119
 * Lot                       : MAGESTOCK CONNEXION RECUPERATION JETON ADMIN1
 * Base requise              : MageStock 2.6.118
 * Création                  : 2026-07-25
 * Dernière modification     : 2026-07-25
 * Dépendances               : config.php, includes/password-recovery.php
 * Données touchées          : password_recovery_tokens.json, password_recovery_audit.json
 * Permissions               : auth.recovery.manage
 * Sécurité                  : session, permission dédiée, CSRF, no-store, compte local actif uniquement
 * Compatibilité             : PHP 8.1 à 8.4
 *
 * Résumé :
 * - Génère un jeton brut affichable une seule fois à l’administrateur.
 * - Ne renvoie jamais de hash ni d’ancien jeton.
 *
 * Historique :
 * - 2.6.119 — Création de l’API de récupération administrateur.
 */

declare(strict_types=1);

require_once dirname(__DIR__) . '/config.php';
require_once dirname(__DIR__) . '/includes/password-recovery.php';

startSession();
requireAdmin();
requirePerm('auth.recovery.manage');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Pragma: no-cache');

if($_SERVER['REQUEST_METHOD'] !== 'POST') jsonError('Méthode non supportée.', 405);
csrfCheck();

$body = json_decode((string)file_get_contents('php://input'), true);
if(!is_array($body)) $body = [];
$action = (string)($body['action'] ?? 'create');
if($action !== 'create') jsonError('Action inconnue.', 400);

try {
    $targetUserId = $body['userId'] ?? null;
    if($targetUserId === null || $targetUserId === '') jsonError('Utilisateur manquant.', 422);
    $duration = (int)($body['durationMinutes'] ?? 60);
    $result = magestockRecoveryCreateToken($targetUserId, $duration, currentUser() ?? []);
    jsonResponse($result, 201);
} catch(MageStockRecoveryException $e) {
    jsonError($e->publicMessage, $e->httpCode());
} catch(Throwable $e) {
    error_log('[MageStock Recovery API] ' . $e->getMessage());
    jsonError('Impossible de créer le jeton de récupération.', 500);
}
