<?php
require_once __DIR__ . '/config.php';

$token = $_GET['token'] ?? $_POST['token'] ?? '';
$error = null;
$exito = false;

if (!$token) {
    http_response_code(400);
    die('Enlace inválido.');
}

$pdo = db();
$stmt = $pdo->prepare("
    SELECT * FROM password_resets
    WHERE token_hash = ? AND usado = 0 AND expira_en > NOW()
");
$stmt->execute([hash('sha256', $token)]);
$reset = $stmt->fetch();

if (!$reset) {
    http_response_code(400);
    die('Este enlace ya expiró o no es válido. Solicita uno nuevo desde la página de recuperación.');
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    csrfValidarOMorir();
    $password  = $_POST['password'] ?? '';
    $password2 = $_POST['password2'] ?? '';

    if (strlen($password) < 8) {
        $error = 'La contraseña debe tener al menos 8 caracteres.';
    } elseif ($password !== $password2) {
        $error = 'Las contraseñas no coinciden.';
    } else {
        $pdo->beginTransaction();
        $pdo->prepare("UPDATE usuarios SET password_hash = ?, intentos_fallidos = 0, bloqueado_hasta = NULL WHERE id = ?")
            ->execute([password_hash($password, PASSWORD_BCRYPT), $reset['usuario_id']]);
        $pdo->prepare("UPDATE password_resets SET usado = 1 WHERE id = ?")->execute([$reset['id']]);
        // Revocar todas las sesiones "recordarme" existentes de este usuario —
        // si alguien más tenía acceso, cambiar la contraseña lo invalida.
        $pdo->prepare("DELETE FROM sesiones_recordarme WHERE usuario_id = ?")->execute([$reset['usuario_id']]);
        $pdo->commit();
        $exito = true;
    }
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Restablecer contraseña — Fondo Documental SGC</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
<link href="estilos.css" rel="stylesheet">
</head>
<body class="pagina-auth">
<div class="container">
<div class="card card-login">
    <div class="card-body">
        <p class="fw-semibold mb-4" style="font-size:.95rem">Crear nueva contraseña</p>

        <?php if ($exito): ?>
            <div class="alert alert-success py-2 mb-3"><i class="bi bi-check-circle me-1"></i>
                Contraseña actualizada. Ya puedes iniciar sesión con ella.
            </div>
            <a href="login.php" class="btn btn-sgc-primary w-100">Ir a iniciar sesión</a>
        <?php else: ?>
            <?php if ($error): ?>
                <div class="alert alert-danger py-2 mb-3"><i class="bi bi-exclamation-circle me-1"></i> <?= htmlspecialchars($error) ?></div>
            <?php endif; ?>
            <form method="post" novalidate>
                <?= csrfCampoOculto() ?>
                <input type="hidden" name="token" value="<?= htmlspecialchars($token) ?>">
                <div class="mb-3">
                    <label class="form-label">Nueva contraseña</label>
                    <input type="password" name="password" class="form-control" required minlength="8" autofocus>
                </div>
                <div class="mb-3">
                    <label class="form-label">Confirmar contraseña</label>
                    <input type="password" name="password2" class="form-control" required minlength="8">
                </div>
                <button type="submit" class="btn btn-sgc-primary w-100">Guardar nueva contraseña</button>
            </form>
        <?php endif; ?>
    </div>
</div>
</div>
</body>
</html>
