{% extends "admin_base.html" %}

{% block title %}考试管理 - 智联青云管理后台{% endblock %}

{% block admin_content %}
<div class="space-y-6">
    <h1 class="text-3xl font-extrabold bg-gradient-to-r from-blue-400 via-purple-400 to-pink-400 bg-clip-text text-transparent">考试管理</h1>

    <div class="futuristic-card-dark overflow-hidden">
        <div class="overflow-x-auto">
            <table class="table-futuristic">
                <thead>
                    <tr>
                        <th>ID</th>
                        <th>标题</th>
                        <th>科目</th>
                        <th>出题人</th>
                        <th>状态</th>
                        <th>创建时间</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody id="exams-tbody"></tbody>
            </table>
        </div>
        <div id="loading-spinner" class="text-center py-8 text-slate-500 hidden">
            <svg class="animate-spin h-6 w-6 mx-auto text-cyan-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
                <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
                <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
            </svg>
            <span class="text-sm">加载中...</span>
        </div>
        <div id="empty-msg" class="text-center py-12 text-slate-500 hidden">暂无考试</div>
    </div>
</div>
{% endblock %}
{% block scripts %}
<script>
const statusMap = {
    'available': ['可用', 'bg-green-500/20 text-green-400 border-green-500/30'],
    'closed': ['已关闭', 'bg-red-500/20 text-red-400 border-red-500/30'],
    'draft': ['草稿', 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30'],
    'scheduled': ['已排期', 'bg-blue-500/20 text-blue-400 border-blue-500/30']
};

async function loadExams() {
    const tbody = document.getElementById('exams-tbody');
    const spinner = document.getElementById('loading-spinner');
    const empty = document.getElementById('empty-msg');

    tbody.innerHTML = '';
    spinner.classList.remove('hidden');
    empty.classList.add('hidden');

    try {
        const res = await fetch('/api/admin/exams');
        const data = await res.json();
        spinner.classList.add('hidden');

        if (!data.success || !data.exams.length) {
            empty.classList.remove('hidden');
            return;
        }

        let html = '';
        data.exams.forEach(e => {
            const [statusText, statusClass] = statusMap[e.status] || [e.status, 'bg-slate-500/20 text-slate-400 border-slate-500/30'];
            const isAvailable = e.status === 'available';
            html += `<tr>
                <td>${e.id}</td>
                <td class="font-medium text-slate-200 max-w-xs truncate">${e.title}</td>
                <td class="text-slate-400">${e.subject || '-'}</td>
                <td class="text-slate-400">${e.creator_name || '-'}</td>
                <td><span class="badge-futuristic ${statusClass}">${statusText}</span></td>
                <td class="text-slate-400">${e.created_at}</td>
                <td class="space-x-2">
                    <button onclick="toggleStatus(${e.id}, '${e.status}')" class="${isAvailable ? 'btn-outline-futuristic border-yellow-500/30 text-yellow-400 hover:bg-yellow-500/20 hover:border-yellow-500/50' : 'btn-futuristic'} px-3 py-1 text-xs">${isAvailable ? '停止' : '恢复'}</button>
                    <button onclick="deleteExam(${e.id}, '${e.title.replace(/'/g, "\\'")}')" class="btn-outline-futuristic px-3 py-1 text-xs border-red-500/30 text-red-400 hover:bg-red-500/20 hover:border-red-500/50">删除</button>
                </td>
            </tr>`;
        });
        tbody.innerHTML = html;
    } catch(e) {
        spinner.classList.add('hidden');
        empty.textContent = '加载失败，请稍后重试';
        empty.classList.remove('hidden');
    }
}
async function toggleStatus(id, currentStatus) {
    const newStatus = currentStatus === 'available' ? 'closed' : 'available';
    const actionText = currentStatus === 'available' ? '停止' : '恢复';
    if (!confirm(`确定${actionText}该考试？`)) return;
    try {
        const res = await fetch(`/api/admin/exams/${id}/status`, {
            method: 'PUT',
            headers: {'Content-Type': 'application/json'},
            body: JSON.stringify({status: newStatus})
        });
        const data = await res.json();
        if (data.success) { loadExams(); } else { alert(data.message || '操作失败'); }
    } catch(e) { alert('网络错误'); }
}

async function deleteExam(id, title) {
    if (!confirm(`确定删除考试「${title}」？此操作不可恢复！`)) return;
    try {
        const res = await fetch(`/api/admin/exams/${id}`, {method: 'DELETE'});
        const data = await res.json();
        if (data.success) { loadExams(); } else { alert(data.message || '操作失败'); }
    } catch(e) { alert('网络错误'); }
}

document.addEventListener('DOMContentLoaded', loadExams);
</script>
{% endblock %}
