import { getChallenges, createChallenge, updateChallenge, deleteChallenge } from "../services/classroom.js";
import { checkInstructorPermission } from "../services/auth.js";
import { auth } from "../services/firebase.js";
export function renderAdminView() {
return `
`;
}
export function setupAdminEvents() {
// Permission Check
const user = auth.currentUser;
if (!user) {
alert("請先登入");
window.location.hash = ''; // Back to Landing
return;
}
checkInstructorPermission(user).then(inst => {
if (!inst || !inst.permissions?.includes('add_question')) {
alert("您沒有權限管理題目");
window.location.hash = 'instructor';
return;
}
});
loadChallenges();
document.getElementById('back-instructor-btn').addEventListener('click', () => {
const referer = localStorage.getItem('vibecoding_admin_referer');
if (referer === 'instructor') {
window.location.hash = 'instructor';
} else {
window.location.hash = ''; // Main landing
}
localStorage.removeItem('vibecoding_admin_referer');
});
document.getElementById('add-challenge-btn').addEventListener('click', () => {
openModal();
});
document.getElementById('save-challenge-btn').addEventListener('click', async () => {
const id = document.getElementById('edit-id').value;
const data = {
title: document.getElementById('edit-title').value,
level: document.getElementById('edit-level').value,
description: document.getElementById('edit-desc').value,
link: document.getElementById('edit-link').value,
order: parseInt(document.getElementById('edit-order').value) || 0
};
if (id) {
await updateChallenge(id, data);
} else {
await createChallenge(data);
}
closeChallengeModal();
loadChallenges();
});
}
async function loadChallenges() {
const list = document.getElementById('challenges-list');
const challenges = await getChallenges();
const levels = ['beginner', 'intermediate', 'advanced'];
const levelNames = {
beginner: "初級 (Beginner)",
intermediate: "中級 (Intermediate)",
advanced: "高級 (Advanced)"
};
// Group challenges
const groups = { beginner: [], intermediate: [], advanced: [] };
challenges.forEach(c => {
if (groups[c.level]) groups[c.level].push(c);
else groups.beginner.push(c); // Fallback
});
list.innerHTML = levels.map(level => {
const groupItems = groups[level] || [];
const isOpen = level === 'beginner' ? 'open' : ''; // Open first by default
const itemsHtml = groupItems.map(c => `
#${c.order}
${c.title}
${c.description}
`).join('');
return `
${levelNames[level]}
${groupItems.length} 題
${itemsHtml || '
尚無題目,請新增
'}
`;
}).join('');
// Expose helpers globally for onclick
window.editChallenge = (id) => {
const c = challenges.find(x => x.id === id);
if (c) openModal(c);
};
window.deleteChallenge = async (id) => {
if (confirm('確定刪除?')) {
await deleteChallenge(id);
loadChallenges();
}
};
}
// Global expose for the "Add to Section" button
window.openModal = function (challenge = null, defaultLevel = 'beginner') {
const modal = document.getElementById('challenge-modal');
const title = document.getElementById('modal-title');
// Reset or Fill
document.getElementById('edit-id').value = challenge ? challenge.id : '';
document.getElementById('edit-title').value = challenge ? challenge.title : '';
// Use challenge level if editing, otherwise use defaultLevel passed from section button
document.getElementById('edit-level').value = challenge ? challenge.level : defaultLevel;
document.getElementById('edit-desc').value = challenge ? challenge.description : '';
document.getElementById('edit-link').value = challenge ? challenge.link : '';
document.getElementById('edit-order').value = challenge ? challenge.order : '1';
title.textContent = challenge ? '編輯題目' : '新增題目';
modal.classList.remove('hidden');
}
window.closeChallengeModal = () => {
document.getElementById('challenge-modal').classList.add('hidden');
};