<?php
session_start();
require_once 'inc/functions.php';
check404();
securityCheck();
if (!isLoggedIn()) {
    header('Location: index.php');
    exit;
}

$user = getUserById($_SESSION['user_id']);
if (!$user) {
    session_destroy();
    header('Location: index.php');
    exit;
}

// CSRF защита
if (empty($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

$errors = [];
$success = [];

// Обработка POST-запросов
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die('CSRF token validation failed');
    }

    // Смена ника
    if (isset($_POST['change_username'])) {
        $newUsername = trim($_POST['new_username']);
        if (empty($newUsername)) {
            $errors['username'] = 'Введите новый ник.';
        } elseif ($user['gold'] < 100) {
            $errors['username'] = 'Недостаточно золота. Требуется 100.';
        } elseif (!isUsernameAvailable($newUsername, $user['id'])) {
            $errors['username'] = 'Этот ник уже занят.';
        } else {
            if (updateUsername($user['id'], $newUsername)) {
                $user['gold'] -= 100;
                updateUserGold($user['id'], $user['gold']);
                $user['username'] = $newUsername;
                $success['username'] = 'Ник успешно изменён.';
            } else {
                $errors['username'] = 'Ошибка при смене ника.';
            }
        }
    }

    // Смена стороны (только на противоположную)
    if (isset($_POST['change_side'])) {
        $currentSide = $user['side'];
        $allowedTarget = ($currentSide == 'Коза Ностра') ? 'Якудза' : 'Коза Ностра';
        $newSide = $_POST['new_side'] ?? '';

        if ($newSide !== $allowedTarget) {
            $errors['side'] = 'Можно сменить сторону только на противоположную.';
        } elseif ($user['gold'] < 50) {
            $errors['side'] = 'Недостаточно золота. Требуется 50.';
        } else {
            if (updateSide($user['id'], $newSide)) {
                $user['gold'] -= 50;
                updateUserGold($user['id'], $user['gold']);
                $user['side'] = $newSide;
                $success['side'] = 'Сторона успешно изменена.';
            } else {
                $errors['side'] = 'Ошибка при смене стороны.';
            }
        }
    }

    // Смена пола
    if (isset($_POST['change_gender'])) {
        $newGender = $_POST['new_gender'] ?? '';
        if (!in_array($newGender, ['Мужской', 'Женский'])) {
            $errors['gender'] = 'Недопустимый пол.';
        } elseif ($user['gold'] < 50) {
            $errors['gender'] = 'Недостаточно золота. Требуется 50.';
        } else {
            $stmt = $pdo->prepare("UPDATE users SET gender = ? WHERE id = ?");
            if ($stmt->execute([$newGender, $user['id']])) {
                $user['gold'] -= 50;
                updateUserGold($user['id'], $user['gold']);
                $user['gender'] = $newGender;
                $success['gender'] = 'Пол успешно изменён.';
            } else {
                $errors['gender'] = 'Ошибка при смене пола.';
            }
        }
    }

    // Загрузка личной аватарки
    if (isset($_POST['upload_avatar'])) {
        if ($user['gold'] < 200) {
            $errors['avatar'] = 'Недостаточно золота. Требуется 200.';
        } elseif (!isset($_FILES['avatar_file']) || $_FILES['avatar_file']['error'] !== UPLOAD_ERR_OK) {
            $errors['avatar'] = 'Ошибка загрузки файла.';
        } else {
            $result = uploadCustomAvatar($user['id'], $_FILES['avatar_file']);
            if ($result['success']) {
                $user['gold'] -= 200;
                updateUserGold($user['id'], $user['gold']);
                $user['custom_avatar'] = $result['path'];
                $user['avatar_type'] = 'custom';
                $success['avatar'] = 'Аватар загружен. Золото списано.';
            } else {
                $errors['avatar'] = $result['message'];
            }
        }
    }

    // Сброс аватара на стандартный
    if (isset($_POST['reset_avatar'])) {
        resetAvatarToGender($user['id']);
        $user['avatar_type'] = 'gender';
        $success['avatar'] = 'Установлен стандартный аватар.';
    }

    // Чёрный список
    if (isset($_POST['add_to_blacklist'])) {
        $username = trim($_POST['blacklist_username']);
        $targetUser = getUserByUsername($username);
        if ($targetUser && $targetUser['id'] != $user['id']) {
            if (!isInBlacklist($user['id'], $targetUser['id'])) {
                addToBlacklist($user['id'], $targetUser['id']);
                $success['blacklist'] = 'Игрок добавлен в чёрный список.';
            } else {
                $errors['blacklist'] = 'Этот игрок уже в чёрном списке.';
            }
        } else {
            $errors['blacklist'] = 'Игрок не найден или это вы сами.';
        }
    }

    if (isset($_POST['remove_from_blacklist']) && !empty($_POST['remove_id'])) {
        removeFromBlacklist($user['id'], (int)$_POST['remove_id']);
        $success['blacklist'] = 'Игрок удалён из чёрного списка.';
    }

    // Настройки отображения
    if (isset($_POST['save_display_settings'])) {
        $settings = [
            'show_drop' => isset($_POST['show_drop']) ? 1 : 0,
            'show_smiles' => isset($_POST['show_smiles']) ? 1 : 0,
            'log_lines' => (int)$_POST['log_lines'],
            'receive_newsletter' => isset($_POST['receive_newsletter']) ? 1 : 0,
            'show_in_noclan' => isset($_POST['show_in_noclan']) ? 1 : 0,
            'color_scheme' => $_POST['color_scheme'] ?? 'blue',
        ];
        saveUserSettings($user['id'], $settings);
        $success['display'] = 'Настройки отображения сохранены.';
    }

    // Смена пароля
    if (isset($_POST['change_password'])) {
        $current = $_POST['current_password'] ?? '';
        $new = $_POST['new_password'] ?? '';
        $confirm = $_POST['confirm_password'] ?? '';

        if (!password_verify($current, $user['password_hash'])) {
            $errors['password'] = 'Неверный текущий пароль.';
        } elseif (strlen($new) < 6) {
            $errors['password'] = 'Новый пароль должен быть не менее 6 символов.';
        } elseif ($new !== $confirm) {
            $errors['password'] = 'Новый пароль и подтверждение не совпадают.';
        } else {
            $newHash = password_hash($new, PASSWORD_DEFAULT);
            if (updateUserPassword($user['id'], $newHash)) {
                $success['password'] = 'Пароль успешно изменён.';
            } else {
                $errors['password'] = 'Ошибка при смене пароля.';
            }
        }
    }
}

// Загружаем текущие настройки пользователя
$userSettings = getUserSettings($user['id']);
$blacklist = getBlacklist($user['id']);

require_once 'inc/header.php';
?>

<span class="ttl"><b><span>Настройки</span></b></span>
<div class="clb"></div>
<div class="hr"></div>

<!-- Вывод сообщений об успехе/ошибках -->
<?php if (!empty($errors) || !empty($success)): ?>
<div style="margin-bottom:10px;">
    <?php foreach ($errors as $e): ?>
        <div class="error"><?= htmlspecialchars($e) ?></div>
    <?php endforeach; ?>
    <?php foreach ($success as $s): ?>
        <div class="ok"><?= htmlspecialchars($s) ?></div>
    <?php endforeach; ?>
</div>
<div class="hr"></div>
<?php endif; ?>

<!-- ===== БЛОК АВАТАРА ===== -->
<div>
    <img width="12" height="12" src="/images/icons/dot.png" alt="" border="0"/>
    <strong>Текущий аватар:</strong>
    <img width="50" height="50" src="<?= htmlspecialchars(getAvatarUrl($user)) ?>" alt="аватар" style="vertical-align:middle; margin-left:10px;"/>
</div>
<div style="margin-top:5px;">
    <form method="post" enctype="multipart/form-data" style="display:inline;">
        <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
        <input type="file" name="avatar_file" accept="image/jpeg,image/png,image/gif" required style="display:inline-block; width:auto;">
        <button type="submit" name="upload_avatar" class="btn small">Загрузить свою (200 <img src="/images/icons/money_gold.png" width="12" height="12" alt="з"/>)</button>
    </form>
    <form method="post" style="display:inline;">
        <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
        <button type="submit" name="reset_avatar" class="btn small">Вернуть стандартный</button>
    </form>
    <div><small>Макс. размер 4 КБ, формат JPG/PNG/GIF</small></div>
</div>
<div class="hr"></div>

<!-- ===== ССЫЛКИ НАСТРОЕК ===== -->
<div>
    <!-- Смена ника -->
    <div>
        <img width="12" height="12" src="/images/icons/dot.png" alt="" border="0"/>
        <a href="#" onclick="document.getElementById('usernameForm').style.display='block'; return false;">Сменить ник</a>
        <span>
            <img src="/images/icons/money_gold.png" width="12" height="12" alt="з"/>
            <span>100</span>
        </span>
    </div>
    <div id="usernameForm" style="display:none; margin-left:20px; margin-bottom:10px;">
        <form method="post">
            <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
            <input type="text" name="new_username" maxlength="32" placeholder="Новый ник" required>
            <button type="submit" name="change_username">Сменить</button>
        </form>
    </div>

    <!-- Смена стороны (только на противоположную) -->
    <div>
        <img width="12" height="12" src="/images/icons/dot.png" alt="" border="0"/>
        <a href="#" onclick="document.getElementById('sideForm').style.display='block'; return false;">Сменить сторону</a>
        <span>
            <img src="/images/icons/money_gold.png" width="12" height="12" alt="з"/>
            <span>50</span>
        </span>
    </div>
    <div id="sideForm" style="display:none; margin-left:20px; margin-bottom:10px;">
        <form method="post">
            <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
            <?php
                $currentSide = $user['side'];
                $opposite = ($currentSide == 'Коза Ностра') ? 'Якудза' : 'Коза Ностра';
            ?>
            <p>Сменить с <strong><?= $currentSide ?></strong> на <strong><?= $opposite ?></strong>?</p>
            <input type="hidden" name="new_side" value="<?= $opposite ?>">
            <button type="submit" name="change_side">Подтвердить смену стороны</button>
        </form>
    </div>

    <!-- Смена пола -->
    <div>
        <img width="12" height="12" src="/images/icons/dot.png" alt="" border="0"/>
        <a href="#" onclick="document.getElementById('genderForm').style.display='block'; return false;">Сменить пол</a>
        <span>
            <img src="/images/icons/money_gold.png" width="12" height="12" alt="з"/>
            <span>50</span>
        </span>
    </div>
    <div id="genderForm" style="display:none; margin-left:20px; margin-bottom:10px;">
        <form method="post">
            <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
            <select name="new_gender">
                <option value="Мужской" <?= $user['gender'] == 'Мужской' ? 'selected' : '' ?>>Мужской</option>
                <option value="Женский" <?= $user['gender'] == 'Женский' ? 'selected' : '' ?>>Женский</option>
            </select>
            <button type="submit" name="change_gender">Сменить</button>
        </form>
    </div>

    <!-- Чёрный список (отдельная форма, можно вынести в ссылку, но для простоты оставим сразу) -->
    <div>
        <img width="12" height="12" src="/images/icons/dot.png" alt="" border="0"/>
        <a href="#" onclick="document.getElementById('blacklistForm').style.display='block'; return false;">Чёрный список</a>
    </div>
    <div id="blacklistForm" style="display:none; margin-left:20px; margin-bottom:10px;">
        <form method="post">
            <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
            <input type="text" name="blacklist_username" placeholder="Имя игрока" required>
            <button type="submit" name="add_to_blacklist">Добавить</button>
        </form>
        <?php if (!empty($blacklist)): ?>
            <ul style="margin-top:5px;">
            <?php foreach ($blacklist as $blocked): ?>
                <li>
                    <?= htmlspecialchars($blocked['username']) ?>
                    <form method="post" style="display:inline;">
                        <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
                        <input type="hidden" name="remove_id" value="<?= $blocked['id'] ?>">
                        <button type="submit" name="remove_from_blacklist" class="btn small">Удалить</button>
                    </form>
                </li>
            <?php endforeach; ?>
            </ul>
        <?php endif; ?>
    </div>
</div>

<div class="hr"></div>

<!-- ===== СМЕНА ПАРОЛЯ (отдельная форма) ===== -->
<h2>Смена пароля</h2>
<form method="post">
    <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
    <label>Текущий пароль:<br/><input type="password" name="current_password" required/></label><br/>
    <label>Новый пароль:<br/><input type="password" name="new_password" required/></label><br/>
    <label>Повтор нового пароля:<br/><input type="password" name="confirm_password" required/></label><br/>
    <input type="submit" value="Сменить пароль" name="change_password"/>
</form>
<div class="hr"></div>

<!-- ===== НАСТРОЙКИ ОТОБРАЖЕНИЯ ===== -->
<h2>Отображение</h2>
<form method="post">
    <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
    <div>
        <input type="checkbox" name="show_drop" value="1" <?= $userSettings['show_drop'] ? 'checked' : '' ?> id="show_drop">
        <label for="show_drop">Показывать падение чужих вещей в Районах</label>
    </div>
    <div>
        <input type="checkbox" name="show_smiles" value="1" <?= $userSettings['show_smiles'] ? 'checked' : '' ?> id="show_smiles">
        <label for="show_smiles">Показывать смайлы</label>
    </div>
    <div>
        <label for="log_lines">Строк в логе боя:</label>
        <select name="log_lines" id="log_lines">
            <?php for ($i=5; $i<=30; $i+=5): ?>
                <option value="<?= $i ?>" <?= $userSettings['log_lines'] == $i ? 'selected' : '' ?>><?= $i ?></option>
            <?php endfor; ?>
        </select>
    </div>
    <div>
        <input type="checkbox" name="receive_newsletter" value="1" <?= $userSettings['receive_newsletter'] ? 'checked' : '' ?> id="receive_newsletter">
        <label for="receive_newsletter">Получать рассылку</label>
    </div>
    <div>
        <input type="checkbox" name="show_in_noclan" value="1" <?= $userSettings['show_in_noclan'] ? 'checked' : '' ?> id="show_in_noclan">
        <label for="show_in_noclan">На странице "Без клана": показывать</label>
    </div>
    <div>
        <label>Цвет:</label>
        <select name="color_scheme">
            <option value="red" <?= $userSettings['color_scheme'] == 'red' ? 'selected' : '' ?>>красный</option>
            <option value="dark" <?= $userSettings['color_scheme'] == 'dark' ? 'selected' : '' ?>>темный</option>
            <option value="blue" <?= $userSettings['color_scheme'] == 'blue' ? 'selected' : '' ?>>синий *</option>
        </select>
    </div>
    <div style="margin-top:10px;">
        <input type="submit" value="Сохранить настройки" name="save_display_settings"/>
    </div>
</form>
<div class="hr"></div>

<!-- ===== ССЫЛКА НА МАГАЗИН АВАТАРОВ (новый файл) ===== -->
<div>
    <img width="12" height="12" src="/images/icons/dot.png" alt="" border="0"/>
    <a href="avatars_shop.php">Магазин аватаров</a>
</div>
<div class="hr"></div>

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