<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit;
if (!function_exists('Mirai_levelEnabled') || !Mirai_levelEnabled()) {
    $userBaseUrl = \Typecho\Common::url('/user', $this->options->index);
    $this->response->redirect($userBaseUrl . '/overview');
    exit;
}
$options = \Typecho\Widget::widget('Widget_Options');
$uid = (int)$this->user->uid;
$currentLevel = Mirai_levelGet($uid);
$nextLevel = $currentLevel + 1;
$maxLevel = Mirai_levelGetMax();
$hasNextLevel = $nextLevel <= $maxLevel;
$userCurrentExp = Mirai_expGet($uid);
$nextLevelExp = 0;
$expToNextLevel = 0;
$progressPercent = 100;

if ($hasNextLevel) {
    $nextLevelExp = Mirai_levelGetExpThreshold($nextLevel);
    $expToNextLevel = max(0, $nextLevelExp - $userCurrentExp);
    if ($nextLevelExp > 0) {
        $progressPercent = min(100, floor(($userCurrentExp / $nextLevelExp) * 100));
    }
}

$levelsList = Mirai_levelGetAllLevels();
$totalLevels = count($levelsList);

$levelColors = [
    1 => ['#9ca3af', '#6b7280'],
    2 => ['#34d399', '#10b981'],
    3 => ['#38bdf8', '#0ea5e9'],
    4 => ['#a78bfa', '#8b5cf6'],
    5 => ['#f472b6', '#ec4899'],
    6 => ['#fb923c', '#f97316'],
    7 => ['#f87171', '#ef4444'],
    8 => ['#fbbf24', '#f59e0b'],
    9 => ['#c084fc', '#a855f7'],
    10 => ['#fcd34d', '#eab308'],
];
for ($i = 11; $i <= 30; $i++) {
    $levelColors[$i] = $levelColors[10];
}
?>
<div class="uc-page uc-level-page">

    <div class="uc-page-header">
        <h2 class="uc-page-title">等级中心</h2>
    </div>

    <div class="lvl-row">
        <div class="lvl-card lvl-info">
            <div class="lvl-info-head">
                <span class="lvl-info-label">我的等级</span>
            </div>
            <div class="lvl-info-lv">LV<?php echo $currentLevel; ?></div>
            <div class="lvl-info-exp">
                <?php if ($hasNextLevel): ?>
                <div class="lvl-info-exp-row">
                    <span class="lvl-info-cur"><?php echo number_format($userCurrentExp); ?></span>
                    <span class="lvl-info-next">/ <?php echo number_format($nextLevelExp); ?></span>
                </div>
                <div class="lvl-info-bar">
                    <div class="lvl-info-bar-inner" style="--pct:<?php echo $progressPercent; ?>%"></div>
                </div>
                <div class="lvl-info-remain">
                    距 <b><?php echo htmlspecialchars(Mirai_levelGetName($nextLevel)); ?></b> 还需 <b><?php echo number_format($expToNextLevel); ?></b> 经验
                </div>
                <?php else: ?>
                <div class="lvl-info-exp-row">
                    <span class="lvl-info-cur"><?php echo number_format($userCurrentExp); ?></span>
                    <span class="lvl-info-next">EXP</span>
                </div>
                <div class="lvl-info-remain">已达最高等级</div>
                <?php endif; ?>
            </div>
        </div>

        <div class="lvl-card lvl-road">
            <div class="lvl-road-head">
                <span>成长路线</span>
                <span class="lvl-road-total">共 <?php echo $totalLevels; ?> 级</span>
            </div>
            <div class="lvl-road-body">
                <div class="lvl-road-track"></div>
                <?php foreach ($levelsList as $idx => $lv):
                    $lvNum = $lv['level'];
                    $isReached = $currentLevel >= $lvNum;
                    $isCurrent = $currentLevel === $lvNum;
                    $lc = $levelColors[min($lvNum, 10)];
                ?>
                <div class="lvl-road-item <?php echo $isCurrent ? 'active' : ''; ?> <?php echo !$isReached ? 'locked' : ''; ?>"
                     style="--dot:<?php echo $lc[0]; ?>;">
                    <div class="lvl-road-dot"><em><?php echo $lvNum; ?></em></div>
                    <span class="lvl-road-name"><?php echo htmlspecialchars($lv['name']); ?></span>
                    <?php if ($isCurrent): ?><span class="lvl-road-tag">当前</span><?php endif; ?>
                </div>
                <?php endforeach; ?>
            </div>
        </div>
    </div>

    <?php
    $activeTab = isset($_GET['subtab']) ? $_GET['subtab'] : 'tasks';
    $expPage = isset($_GET['exp_page']) ? max(1, (int)$_GET['exp_page']) : 1;
    $expPageSize = 10;
    $expLogsData = function_exists('Mirai_expGetLogs') ? Mirai_expGetLogs($uid, $expPage, $expPageSize) : ['list' => [], 'total' => 0];
    $expLogsList = $expLogsData['list'];
    $expTotal = $expLogsData['total'];

    $actionMap = [
        'sign_up' => '注册奖励',
        'sign_in' => '每日登录',
        'post_new' => '发布文章',
        'post_like' => '文章获赞',
        'post_collect' => '文章被收藏',
        'comment_new' => '发表评论',
        'admin_adjust' => '管理员调整',
    ];
    ?>

    <div class="uc-tabs">
        <button type="button" class="uc-tab-btn <?php echo $activeTab === 'tasks' ? 'active' : ''; ?>" onclick="switchLevelTab('tasks')">经验获取</button>
        <button type="button" class="uc-tab-btn <?php echo $activeTab === 'logs' ? 'active' : ''; ?>" onclick="switchLevelTab('logs')">经验明细</button>
    </div>

    <div id="tab-tasks" class="uc-tab-content" style="<?php echo $activeTab === 'tasks' ? '' : 'display:none;' ?>">
        <div class="uc-section-block">
            <h3 class="uc-section-title">经验获取</h3>
            <div class="lvl-task-list">
                <?php
                $tasks = [
                    ['sign_up' => ['label' => '注册账号', 'desc' => '首次注册奖励']],
                    ['sign_in' => ['label' => '每日登录', 'desc' => '每天首次登录']],
                    ['post_new' => ['label' => '发布文章', 'desc' => '发布新文章']],
                    ['post_like' => ['label' => '文章获赞', 'desc' => '文章被点赞']],
                    ['post_collect' => ['label' => '文章被收藏', 'desc' => '文章被收藏']],
                    ['comment_new' => ['label' => '发表评论', 'desc' => '发表新评论']],
                ];
                foreach ($tasks as $task):
                    $key = array_key_first($task);
                    $t = $task[$key];
                    $val = Mirai_expGetTaskValue($key);
                ?>
                <div class="lvl-task-item">
                    <div class="lvl-task-body">
                        <span class="lvl-task-name"><?php echo $t['label']; ?></span>
                        <span class="lvl-task-desc"><?php echo $t['desc']; ?></span>
                    </div>
                    <div class="lvl-task-reward">+<?php echo $val; ?> <small>EXP</small></div>
                </div>
                <?php endforeach; ?>
            </div>
        </div>
    </div>

    <div id="tab-logs" class="uc-tab-content" style="<?php echo $activeTab === 'logs' ? '' : 'display:none;' ?>">
        <div class="uc-section-block">
            <h3 class="uc-section-title">经验明细</h3>
            <div class="uc-list">
                <?php if (empty($expLogsList)): ?>
                    <div class="uc-empty">暂无经验记录</div>
                <?php else: ?>
                    <?php foreach ($expLogsList as $log): ?>
                    <div class="uc-list-item">
                        <div class="uc-item-body">
                            <div class="uc-item-title"><?php echo isset($actionMap[$log['action']]) ? htmlspecialchars($actionMap[$log['action']]) : htmlspecialchars($log['action']); ?></div>
                            <div class="uc-item-meta">
                                <span><i class="ri-time-line"></i> <?php echo (new \Typecho\Date((int)$log['created']))->format('Y-m-d H:i'); ?></span>
                                <span class="uc-tag uc-tag-success">+<?php echo (int)$log['amount']; ?> EXP</span>
                            </div>
                        </div>
                    </div>
                    <?php endforeach; ?>
                    <?php if ($expTotal > $expPageSize): ?>
                        <?php
                        $eTotalPages = ceil($expTotal / $expPageSize);
                        echo Mirai_customPagination($expPage, $eTotalPages, function($p) use ($options) {
                            return \Typecho\Common::url('/user/level?subtab=logs&exp_page=' . $p, $options->index);
                        });
                        ?>
                    <?php endif; ?>
                <?php endif; ?>
            </div>
        </div>
    </div>
</div>
<script>
function switchLevelTab(tab) {
    document.querySelectorAll('.uc-tab-btn').forEach(function(btn) { btn.classList.remove('active'); });
    document.querySelectorAll('.uc-tab-content').forEach(function(c) { c.style.display = 'none'; });
    event.target.classList.add('active');
    document.getElementById('tab-' + tab).style.display = '';
}
</script>
