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

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

// ID просматриваемого пользователя
$userId = isset($_GET['user_id']) ? (int)$_GET['user_id'] : $currentUser['id'];
$profileUser = getUserById($userId);
if (!$profileUser) {
    header('Location: achievements.php');
    exit;
}

$isOwnProfile = ($userId == $currentUser['id']);

// Обработка установки титула
if ($isOwnProfile && isset($_POST['set_displayed'])) {
    $achievementId = (int)$_POST['achievement_id'];
    $result = setDisplayedAchievement($userId, $achievementId);
    $message = $result['message'];
    $messageClass = $result['success'] ? 'ok' : 'error';
}

// Получаем все категории
$categories = getAchievementCategories();

// Определяем текущую категорию из GET
$currentCat = isset($_GET['cat']) ? (int)$_GET['cat'] : null;
if ($currentCat && !getAchievementCategoryById($currentCat)) {
    $currentCat = null; // сброс, если категория не существует
}

// Получаем достижения (для текущей категории или все)
if ($currentCat) {
    $achievements = getAchievementsByCategory($currentCat);
} else {
    $achievements = getAllAchievements(); // функция, возвращающая все достижения с категориями
}

$userAchievements = getUserAchievements($userId);
$userAchievementIds = array_column($userAchievements, 'achievement_id');
$displayedAchievement = getDisplayedAchievement($userId);

$totalPoints = $profileUser['achievement_points'];
$bonuses = [
    'attack' => $profileUser['bonus_attack'],
    'health' => $profileUser['bonus_health'],
    'defense' => $profileUser['bonus_defense'],
    'stamina' => $profileUser['bonus_stamina'],
    'recovery' => $profileUser['bonus_recovery'],
];

require_once 'inc/header.php';
?>

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

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

<!-- Верхний блок: пользователь и очки -->
<div>
    <img width="12" height="12" src="/images/icons/blue_warrior.png" alt=""/>
    <a href="profile.php?id=<?= $userId ?>"><?= htmlspecialchars($profileUser['username']) ?></a>
    <img width="12" height="12" src="/images/icons/star_default.png" alt=""/>
    <b><?= $totalPoints ?></b> очков достижений
</div>

<!-- Установленный титул -->
<?php if ($displayedAchievement): ?>
    <div>
        <img width="12" height="12" src="<?= htmlspecialchars($displayedAchievement['icon']) ?>" alt=""/>
        <span class="info"><?= htmlspecialchars($displayedAchievement['name']) ?></span>
        <?php if ($isOwnProfile): ?>
            <form method="post" style="display:inline;">
                <input type="hidden" name="achievement_id" value="0">
                <button type="submit" name="set_displayed" class="btn small">Снять</button>
            </form>
        <?php endif; ?>
    </div>
    <div class="hr"></div>
<?php endif; ?>

<!-- Бонусы титулов -->
<div>
    <b>Бонус титулов:</b><br/>
    <span><span style="color:#6FCD72;">+<?= $bonuses['attack'] ?></span> атаки</span>
    <span><span style="color:#6FCD72;">+<?= $bonuses['health'] ?></span> здоровья</span>
    <span><span style="color:#6FCD72;">+<?= $bonuses['defense'] ?></span> защиты</span>
    <span><span style="color:#6FCD72;">+<?= $bonuses['stamina'] ?></span> выносливости</span>
    <span><span style="color:#6FCD72;">+<?= $bonuses['recovery'] ?></span> восстановления</span>
</div>
<div class="hr"></div>

<!-- Недавние достижения (первые 5) -->
<b>Недавние достижения:</b>
<div style="margin-top:5px;">
    <?php $recent = getRecentUserAchievements($userId, 5); ?>
    <?php if ($recent): ?>
        <?php foreach ($recent as $r): ?>
            <div>
                <img class="internalIcon" src="<?= htmlspecialchars($r['icon']) ?>" alt=""/>
                <a href="achievements.php?user_id=<?= $userId ?>&highlight=<?= $r['achievement_id'] ?>"><?= htmlspecialchars($r['name']) ?></a>
                <img src="/images/icons/star_default.png" width="12" height="12" alt=""/><b><?= $r['points'] ?></b>
                <br/>
                <span class="small minor"><?= htmlspecialchars($r['description']) ?></span>
                <div class="hr"></div>
            </div>
        <?php endforeach; ?>
    <?php else: ?>
        <p class="minor">Пока нет достижений.</p>
    <?php endif; ?>
</div>

<!-- Вкладки категорий -->
<div style="margin:10px 0; display:flex; flex-wrap:wrap; gap:10px;">
    <?php foreach ($categories as $cat): 
        $active = ($currentCat == $cat['id']) ? 'style="font-weight:bold; background:#e0e0e0; padding:2px 5px;"' : '';
        $total = getTotalAchievementsCountInCategory($cat['id']);
        $earned = getUserAchievementsCountInCategory($userId, $cat['id']);
    ?>
        <a href="?user_id=<?= $userId ?>&cat=<?= $cat['id'] ?>" <?= $active ?>>
            <img width="16" height="16" src="<?= htmlspecialchars($cat['icon']) ?>" alt="" style="vertical-align:middle;"/>
            <?= htmlspecialchars($cat['name']) ?> 
            <span class="minor">(<?= $earned ?>/<?= $total ?>)</span>
        </a>
    <?php endforeach; ?>
    <?php if ($currentCat): ?>
        <a href="?user_id=<?= $userId ?>" style="margin-left:auto;">[все категории]</a>
    <?php endif; ?>
</div>
<div class="hr"></div>

<!-- Достижения текущей категории (или все) -->
<?php if ($achievements): ?>
    <?php foreach ($achievements as $ach): 
        $isEarned = in_array($ach['id'], $userAchievementIds);
        $isDisplayed = ($displayedAchievement && $displayedAchievement['id'] == $ach['id']);
    ?>
        <div style="margin:10px 0; padding:5px; <?= $isEarned ? 'background:#f5f5f5;' : '' ?>">
            <table width="100%">
                <tr>
                    <td valign="top" width="30">
                        <img src="<?= htmlspecialchars($ach['icon']) ?>" width="24" height="24" alt=""/>
                    </td>
                    <td valign="top">
                        <b><?= htmlspecialchars($ach['name']) ?></b>
                        <?php if ($ach['is_title'] && $isOwnProfile && $isEarned): ?>
                            <?php if ($isDisplayed): ?>
                                <span class="info">[активен]</span>
                                <form method="post" style="display:inline;">
                                    <input type="hidden" name="achievement_id" value="0">
                                    <button type="submit" name="set_displayed" class="btn small">Снять</button>
                                </form>
                            <?php else: ?>
                                <form method="post" style="display:inline;">
                                    <input type="hidden" name="achievement_id" value="<?= $ach['id'] ?>">
                                    <button type="submit" name="set_displayed" class="btn small">Установить</button>
                                </form>
                            <?php endif; ?>
                        <?php endif; ?>
                        <br/>
                        <span class="small minor"><?= nl2br(htmlspecialchars($ach['description'])) ?></span><br/>
                        <?php if ($ach['points'] > 0): ?>
                            <span><img src="/images/icons/star_default.png" width="12" height="12" alt=""/> <?= $ach['points'] ?> очков</span>
                        <?php endif; ?>
                        <?php if ($ach['bonus_attack'] || $ach['bonus_health'] || $ach['bonus_defense'] || $ach['bonus_stamina'] || $ach['bonus_recovery']): ?>
                            <span class="minor">(бонус: 
                                <?php if ($ach['bonus_attack']) echo '+'.$ach['bonus_attack'].' атаки '; ?>
                                <?php if ($ach['bonus_health']) echo '+'.$ach['bonus_health'].' здоровья '; ?>
                                <?php if ($ach['bonus_defense']) echo '+'.$ach['bonus_defense'].' защиты '; ?>
                                <?php if ($ach['bonus_stamina']) echo '+'.$ach['bonus_stamina'].' выносливости '; ?>
                                <?php if ($ach['bonus_recovery']) echo '+'.$ach['bonus_recovery'].' восстановления '; ?>
                            )</span>
                        <?php endif; ?>
                        <?php if ($isEarned): ?>
                            <span class="ok">[получено]</span>
                        <?php endif; ?>
                    </td>
                </tr>
            </table>
        </div>
    <?php endforeach; ?>
<?php else: ?>
    <p>В этой категории пока нет достижений.</p>
<?php endif; ?>

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