<?php
session_start();
require_once 'inc/functions.php';
check404();
securityCheck();
sendSecurityHeaders();

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

$error = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || !checkCsrfToken($_POST['csrf_token'])) {
        $error = 'Ошибка безопасности. Обновите страницу.';
    } else {
        // Rate limiting для регистрации (например, 3 регистрации в час с одного IP)
        if (isRateLimitExceeded('register', 3, 3600)) {
            $error = 'Слишком много регистраций с вашего IP. Попробуйте позже.';
        } else {
            $username = trim($_POST['username'] ?? '');
            $password = $_POST['password'] ?? '';
            $confirm = $_POST['confirm_password'] ?? '';
            $side = $_POST['side'] ?? '';
            $gender = $_POST['gender'] ?? '';

            if (empty($username) || empty($password) || empty($side) || empty($gender)) {
                $error = 'Все поля обязательны';
            } elseif ($password !== $confirm) {
                $error = 'Пароли не совпадают';
            } elseif (strlen($username) < 3 || strlen($username) > 50) {
                $error = 'Ник от 3 до 50 символов';
            } elseif (strlen($password) < 4) {
                $error = 'Пароль минимум 4 символа';
            } else {
                // Проверка уникальности ника
                $stmt = $pdo->prepare("SELECT id FROM users WHERE username = ?");
                $stmt->execute([$username]);
                if ($stmt->fetch()) {
                    $error = 'Игрок с таким ником уже существует';
                } else {
                    // Хеширование пароля
                    $hash = password_hash($password, PASSWORD_DEFAULT);
                    
                    // Вставка нового пользователя
                    $sql = "INSERT INTO users (username, password, side, gender) VALUES (?, ?, ?, ?)";
                    $stmt = $pdo->prepare($sql);
                    $stmt->execute([$username, $hash, $side, $gender]);
                    
                    $userId = $pdo->lastInsertId();

                    // Сохраняем IP и User-Agent
                    $ip = $_SERVER['REMOTE_ADDR'] ?? '';
                    $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';
                    $stmt = $pdo->prepare("UPDATE users SET ip = ?, user_agent = ? WHERE id = ?");
                    $stmt->execute([$ip, $userAgent, $userId]);
                    
                    // Пересчёт характеристик
                    recalcUserStats($userId);
                    
                    // Регенерация сессии и автоматический вход
                    session_regenerate_id(true);
                    $_SESSION['user_id'] = $userId;

                    // Сброс rate limit для регистрации
                    resetRateLimit('register');

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

$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="register-form">
    <input type="hidden" name="csrf_token" value="<?= htmlspecialchars($csrfToken) ?>">
    <div>
        <label>Ник:</label>
        <input type="text" name="username" value="<?= htmlspecialchars($_POST['username'] ?? '') ?>" required>
    </div>
    <div>
        <label>Пароль:</label>
        <input type="password" name="password" required>
    </div>
    <div>
        <label>Повторите пароль:</label>
        <input type="password" name="confirm_password" required>
    </div>
    <div>
        <label>Сторона:</label>
        <select name="side">
            <option value="Коза Ностра">Коза Ностра</option>
            <option value="Якудза">Якудза</option>
        </select>
    </div>
    <div>
        <label>Пол:</label>
        <select name="gender">
            <option value="Мужской">Мужской</option>
            <option value="Женский">Женский</option>
        </select>
    </div>
    <div>
        <button type="submit">Зарегистрироваться</button>
    </div>
</form>

<div class="hr"></div>
<div class="cntr">
    <a href="index.php">← На главную</a>
</div>

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