<?php
/** Conclui a recuperação: valida o token e grava a nova senha. */

require_once __DIR__ . '/db.php';

iniciar_sessao();
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    responder(['erro' => 'Método não permitido'], 405);
}

$d = corpo_json();
$token = trim($d['token'] ?? '');
$senha = $d['senha'] ?? '';

if ($token === '') {
    responder(['erro' => 'Link inválido.'], 422);
}
if (mb_strlen($senha) < 8) {
    responder(['erro' => 'A nova senha precisa ter pelo menos 8 caracteres.'], 422);
}

$st = db()->prepare(
    "SELECT * FROM usuarios WHERE reset_token = ? AND reset_expira > datetime('now')"
);
$st->execute([hash('sha256', $token)]);
$u = $st->fetch(PDO::FETCH_ASSOC);

if (!$u) {
    responder(['erro' => 'Este link expirou ou já foi usado. Peça um novo.'], 410);
}

$st = db()->prepare(
    'UPDATE usuarios SET senha_hash = ?, reset_token = NULL, reset_expira = NULL WHERE id = ?'
);
$st->execute([password_hash($senha, PASSWORD_DEFAULT), $u['id']]);

session_regenerate_id(true);
$_SESSION['usuario_id'] = (int) $u['id'];

responder(['ok' => true, 'nome' => $u['nome']]);
