<?php
session_start();
require_once 'inc/functions.php';
check404();
securityCheck();
sendSecurityHeaders(); // заголовки безопасности

if (isLoggedIn()) {
    header('Location: index.php');
    exit;
}

$error = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Проверка CSRF
    if (!isset($_POST['csrf_token']) || !checkCsrfToken($_POST['csrf_token'])) {
        $error = 'Ошибка безопасности. Обновите страницу.';
    } else {
        // Rate limiting для входа
        if (isRateLimitExceeded('login', 5, 60)) {
            $error = 'Слишком много попыток входа. Попробуйте позже.';
        } else {
            $username = trim($_POST['username']);
            $password = $_POST['password'];

            if (empty($username) || empty($password)) {
                $error = 'Заполните оба поля';
            } else {
                $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
                $stmt->execute([$username]);
                $user = $stmt->fetch();

                if ($user && password_verify($password, $user['password'])) {
                    // Проверка бана
                    if (isBanned($user['id'])) {
                        $error = 'Ваш аккаунт заблокирован.';
                    } else {
                        // Сохраняем IP и User-Agent
                        $ip = $_SERVER['REMOTE_ADDR'] ?? '';
                        $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
                        $stmt = $pdo->prepare("UPDATE users SET ip = ?, user_agent = ?, last_login = NOW() WHERE id = ?");
                        $stmt->execute([$ip, $userAgent, $user['id']]);

                        // Регенерация ID сессии для защиты от фиксации сессии
                        session_regenerate_id(true);
                        $_SESSION['user_id'] = $user['id'];

                        // Сброс rate limit
                        resetRateLimit('login');

                        header('Location: index.php');
                        exit;
                    }
                } else {
                    $error = 'Неверный логин или пароль';
                }
            }
        }
    }
}

// Генерируем CSRF-токен для формы
$csrfToken = generateCsrfToken();

require_once 'inc/header.php';
?>

<span class="ttl"><b>Вход в игру</b></span>
<div class="clb"></div>
<div class="hr"></div>

<?php if ($error): ?>
    <div class="error"><?= htmlspecialchars($error) ?></div>
<?php endif; ?>

<form method="post" class="login-form">
    <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrfToken) ?>">
    <div>
        <label>Ник:</label>
        <input type="text" name="username" required>
    </div>
    <div>
        <label>Пароль:</label>
        <input type="password" name="password" required>
    </div>
    <div>
        <button type="submit">Войти</button>
    </div>
</form>

<div class="hr"></div>
<div class="cntr">
    <a href="register.php">Нет аккаунта? Зарегистрироваться</a><br>
    <a href="index.php">← На главную</a>
</div>

<?php require_once 'inc/foot.php'; ?>