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

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

$currentUser = getUserById($_SESSION['user_id']);
if (!$currentUser || ($currentUser['role'] !== 'admin' && $currentUser['role'] !== 'moderator')) {
    header('Location: profile.php');
    exit;
}

$message = '';
$error = '';

// Обработка действий
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Категории
    if (isset($_POST['add_category'])) {
        $name = trim($_POST['name']);
        $icon = trim($_POST['icon']);
        $sort = (int)$_POST['sort_order'];
        if ($name && adminCreateCategory($name, $icon, $sort)) {
            $message = 'Категория добавлена.';
        } else {
            $error = 'Ошибка при добавлении категории.';
        }
    }
    if (isset($_POST['update_category'])) {
        $id = (int)$_POST['id'];
        $name = trim($_POST['name']);
        $icon = trim($_POST['icon']);
        $sort = (int)$_POST['sort_order'];
        if (adminUpdateCategory($id, $name, $icon, $sort)) {
            $message = 'Категория обновлена.';
        } else {
            $error = 'Ошибка при обновлении категории.';
        }
    }
    if (isset($_POST['delete_category'])) {
        $id = (int)$_POST['id'];
        if (adminDeleteCategory($id)) {
            $message = 'Категория удалена.';
        } else {
            $error = 'Ошибка при удалении категории.';
        }
    }

    // Достижения
    if (isset($_POST['add_achievement'])) {
        $data = [
            'category_id' => (int)$_POST['category_id'],
            'name' => trim($_POST['name']),
            'description' => trim($_POST['description']),
            'icon' => trim($_POST['icon']),
            'points' => (int)$_POST['points'],
            'bonus_attack' => (int)$_POST['bonus_attack'],
            'bonus_health' => (int)$_POST['bonus_health'],
            'bonus_defense' => (int)$_POST['bonus_defense'],
            'bonus_stamina' => (int)$_POST['bonus_stamina'],
            'bonus_recovery' => (int)$_POST['bonus_recovery'],
            'is_title' => isset($_POST['is_title']) ? 1 : 0,
            'requirement_type' => $_POST['requirement_type'] ?: null,
            'requirement_value' => $_POST['requirement_value'] ? (int)$_POST['requirement_value'] : null,
            'optional_data' => null,
            'sort_order' => (int)$_POST['sort_order']
        ];
        if (adminCreateAchievement($data)) {
            $message = 'Достижение добавлено.';
        } else {
            $error = 'Ошибка при добавлении достижения.';
        }
    }
    if (isset($_POST['update_achievement'])) {
        $id = (int)$_POST['id'];
        $data = [
            'category_id' => (int)$_POST['category_id'],
            'name' => trim($_POST['name']),
            'description' => trim($_POST['description']),
            'icon' => trim($_POST['icon']),
            'points' => (int)$_POST['points'],
            'bonus_attack' => (int)$_POST['bonus_attack'],
            'bonus_health' => (int)$_POST['bonus_health'],
            'bonus_defense' => (int)$_POST['bonus_defense'],
            'bonus_stamina' => (int)$_POST['bonus_stamina'],
            'bonus_recovery' => (int)$_POST['bonus_recovery'],
            'is_title' => isset($_POST['is_title']) ? 1 : 0,
            'requirement_type' => $_POST['requirement_type'] ?: null,
            'requirement_value' => $_POST['requirement_value'] ? (int)$_POST['requirement_value'] : null,
            'optional_data' => null,
            'sort_order' => (int)$_POST['sort_order']
        ];
        if (adminUpdateAchievement($id, $data)) {
            $message = 'Достижение обновлено.';
        } else {
            $error = 'Ошибка при обновлении достижения.';
        }
    }
    if (isset($_POST['delete_achievement'])) {
        $id = (int)$_POST['id'];
        if (adminDeleteAchievement($id)) {
            $message = 'Достижение удалено.';
        } else {
            $error = 'Ошибка при удалении достижения.';
        }
    }
}

$categories = getAchievementCategories();
$achievements = getAllAchievements();

require_once '../inc/header.php';
?>

<span class="ttl"><b>Администрирование достижений</b></span>
<div class="clb"></div>
<div class="hr"></div>

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

<!-- Категории -->
<span class="ttl"><b>Категории</b></span>
<div class="clb"></div>
<div class="hr"></div>

<table class="forum" width="100%">
    <tr>
        <th>ID</th>
        <th>Название</th>
        <th>Иконка</th>
        <th>Сортировка</th>
        <th>Действия</th>
    </tr>
    <?php foreach ($categories as $cat): ?>
    <tr>
        <td><?= $cat['id'] ?></td>
        <td><?= htmlspecialchars($cat['name']) ?></td>
        <td><?= htmlspecialchars($cat['icon']) ?></td>
        <td><?= $cat['sort_order'] ?></td>
        <td>
            <form method="post" style="display:inline;">
                <input type="hidden" name="id" value="<?= $cat['id'] ?>">
                <button type="submit" name="delete_category" class="btn small" onclick="return confirm('Удалить категорию? Все достижения в ней также будут удалены.')">Удалить</button>
            </form>
            <button class="btn small" onclick="showEditCategory(<?= $cat['id'] ?>, '<?= htmlspecialchars(addslashes($cat['name'])) ?>', '<?= htmlspecialchars(addslashes($cat['icon'])) ?>', <?= $cat['sort_order'] ?>)">Редактировать</button>
        </td>
    </tr>
    <?php endforeach; ?>
</table>

<div style="margin:10px 0;">
    <h4>Добавить категорию</h4>
    <form method="post">
        <input type="text" name="name" placeholder="Название" required>
        <input type="text" name="icon" placeholder="Иконка (путь)" value="/images/icons/star_default.png">
        <input type="number" name="sort_order" placeholder="Сортировка" value="0">
        <button type="submit" name="add_category" class="btn">Добавить</button>
    </form>
</div>

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

<!-- Достижения -->
<span class="ttl"><b>Достижения</b></span>
<div class="clb"></div>
<div class="hr"></div>

<table class="forum" width="100%">
    <tr>
        <th>ID</th>
        <th>Название</th>
        <th>Категория</th>
        <th>Очки</th>
        <th>Бонусы</th>
        <th>Титул</th>
        <th>Действия</th>
    </tr>
    <?php foreach ($achievements as $ach): ?>
    <tr>
        <td><?= $ach['id'] ?></td>
        <td><?= htmlspecialchars($ach['name']) ?></td>
        <td><?= htmlspecialchars($ach['category_name']) ?></td>
        <td><?= $ach['points'] ?></td>
        <td>
            A:<?= $ach['bonus_attack'] ?> H:<?= $ach['bonus_health'] ?> D:<?= $ach['bonus_defense'] ?> S:<?= $ach['bonus_stamina'] ?> R:<?= $ach['bonus_recovery'] ?>
        </td>
        <td><?= $ach['is_title'] ? 'Да' : 'Нет' ?></td>
        <td>
            <form method="post" style="display:inline;">
                <input type="hidden" name="id" value="<?= $ach['id'] ?>">
                <button type="submit" name="delete_achievement" class="btn small" onclick="return confirm('Удалить достижение?')">Удалить</button>
            </form>
            <button class="btn small" onclick="showEditAchievement(<?= htmlspecialchars(json_encode($ach)) ?>)">Редактировать</button>
        </td>
    </tr>
    <?php endforeach; ?>
</table>

<div style="margin:10px 0;">
    <h4>Добавить достижение</h4>
    <form method="post">
        <table>
            <tr><td>Категория:</td><td>
                <select name="category_id" required>
                    <?php foreach ($categories as $cat): ?>
                        <option value="<?= $cat['id'] ?>"><?= htmlspecialchars($cat['name']) ?></option>
                    <?php endforeach; ?>
                </select>
            </td></tr>
            <tr><td>Название:</td><td><input type="text" name="name" required></td></tr>
            <tr><td>Описание:</td><td><textarea name="description" rows="2" cols="40"></textarea></td></tr>
            <tr><td>Иконка (путь):</td><td><input type="text" name="icon" value="/images/icons/star_default.png"></td></tr>
            <tr><td>Очки:</td><td><input type="number" name="points" value="0" min="0"></td></tr>
            <tr><td>Бонус атаки:</td><td><input type="number" name="bonus_attack" value="0" min="0"></td></tr>
            <tr><td>Бонус здоровья:</td><td><input type="number" name="bonus_health" value="0" min="0"></td></tr>
            <tr><td>Бонус защиты:</td><td><input type="number" name="bonus_defense" value="0" min="0"></td></tr>
            <tr><td>Бонус выносливости:</td><td><input type="number" name="bonus_stamina" value="0" min="0"></td></tr>
            <tr><td>Бонус восстановления:</td><td><input type="number" name="bonus_recovery" value="0" min="0"></td></tr>
            <tr><td>Титул (можно установить в профиле):</td><td><input type="checkbox" name="is_title" value="1"></td></tr>
            <tr><td>Тип условия:</td><td>
                <select name="requirement_type">
                    <option value="">-- нет --</option>
                    <option value="level">Уровень</option>
                    <option value="total_stats">Сумма статов</option>
                    <option value="pvp_wins">Победы в PvP</option>
                    <option value="days_registered">Дней с регистрации</option>
                    <option value="participation">Участие</option>
                    <option value="gold">Золото</option>
                    <option value="bucks">Баксы</option>
                </select>
            </td></tr>
            <tr><td>Значение условия:</td><td><input type="number" name="requirement_value" min="0"></td></tr>
            <tr><td>Сортировка:</td><td><input type="number" name="sort_order" value="0"></td></tr>
            <tr><td colspan="2"><button type="submit" name="add_achievement" class="btn">Добавить</button></td></tr>
        </table>
    </form>
</div>

<!-- Скрипты для редактирования -->
<script>
function showEditCategory(id, name, icon, sort) {
    let form = document.createElement('form');
    form.method = 'post';
    form.innerHTML = `
        <input type="hidden" name="id" value="${id}">
        <input type="text" name="name" value="${name.replace(/"/g, '&quot;')}" required>
        <input type="text" name="icon" value="${icon.replace(/"/g, '&quot;')}">
        <input type="number" name="sort_order" value="${sort}">
        <button type="submit" name="update_category" class="btn">Сохранить</button>
        <button type="button" onclick="this.parentElement.remove()">Отмена</button>
    `;
    document.body.appendChild(form);
    form.style.position = 'absolute';
    form.style.top = '100px';
    form.style.left = '100px';
    form.style.background = '#fff';
    form.style.padding = '10px';
    form.style.border = '1px solid #ccc';
    form.style.zIndex = 1000;
}
function showEditAchievement(ach) {
    let data = ach;
    let form = document.createElement('form');
    form.method = 'post';
    form.innerHTML = `
        <input type="hidden" name="id" value="${data.id}">
        <table>
            <tr><td>Категория:</td><td>
                <select name="category_id" required>
                    <?php foreach ($categories as $cat): ?>
                        <option value="<?= $cat['id'] ?>" ${data.category_id == <?= $cat['id'] ?> ? 'selected' : ''}> <?= htmlspecialchars($cat['name']) ?> </option>
                    <?php endforeach; ?>
                </select>
            </td></tr>
            <tr><td>Название:</td><td><input type="text" name="name" value="${data.name.replace(/"/g, '&quot;')}" required></td></tr>
            <tr><td>Описание:</td><td><textarea name="description" rows="2">${data.description.replace(/"/g, '&quot;')}</textarea></td></tr>
            <tr><td>Иконка:</td><td><input type="text" name="icon" value="${data.icon.replace(/"/g, '&quot;')}"></td></tr>
            <tr><td>Очки:</td><td><input type="number" name="points" value="${data.points}" min="0"></td></tr>
            <tr><td>Бонус атаки:</td><td><input type="number" name="bonus_attack" value="${data.bonus_attack}" min="0"></td></tr>
            <tr><td>Бонус здоровья:</td><td><input type="number" name="bonus_health" value="${data.bonus_health}" min="0"></td></tr>
            <tr><td>Бонус защиты:</td><td><input type="number" name="bonus_defense" value="${data.bonus_defense}" min="0"></td></tr>
            <tr><td>Бонус выносливости:</td><td><input type="number" name="bonus_stamina" value="${data.bonus_stamina}" min="0"></td></tr>
            <tr><td>Бонус восстановления:</td><td><input type="number" name="bonus_recovery" value="${data.bonus_recovery}" min="0"></td></tr>
            <tr><td>Титул:</td><td><input type="checkbox" name="is_title" value="1" ${data.is_title ? 'checked' : ''}></td></tr>
            <tr><td>Тип условия:</td><td>
                <select name="requirement_type">
                    <option value="">-- нет --</option>
                    <option value="level" ${data.requirement_type == 'level' ? 'selected' : ''}>Уровень</option>
                    <option value="total_stats" ${data.requirement_type == 'total_stats' ? 'selected' : ''}>Сумма статов</option>
                    <option value="pvp_wins" ${data.requirement_type == 'pvp_wins' ? 'selected' : ''}>Победы в PvP</option>
                    <option value="days_registered" ${data.requirement_type == 'days_registered' ? 'selected' : ''}>Дней с регистрации</option>
                    <option value="participation" ${data.requirement_type == 'participation' ? 'selected' : ''}>Участие</option>
                    <option value="gold" ${data.requirement_type == 'gold' ? 'selected' : ''}>Золото</option>
                    <option value="bucks" ${data.requirement_type == 'bucks' ? 'selected' : ''}>Баксы</option>
                </select>
            </td></tr>
            <tr><td>Значение условия:</td><td><input type="number" name="requirement_value" value="${data.requirement_value || ''}"></td></tr>
            <tr><td>Сортировка:</td><td><input type="number" name="sort_order" value="${data.sort_order}"></td></tr>
            <tr><td colspan="2"><button type="submit" name="update_achievement" class="btn">Сохранить</button>
            <button type="button" onclick="this.parentElement.parentElement.parentElement.parentElement.remove()">Отмена</button></td></tr>
        </table>
    `;
    document.body.appendChild(form);
    form.style.position = 'absolute';
    form.style.top = '100px';
    form.style.left = '100px';
    form.style.background = '#fff';
    form.style.padding = '10px';
    form.style.border = '1px solid #ccc';
    form.style.zIndex = 1000;
}
</script>

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