import { createRoom, joinRoom, checkNicknameConflict } from "../services/classroom.js"; import { generateMonsterSVG, MONSTER_DEFS } from "../utils/monsterUtils.js"; // ... (renderLandingView remains same) ... export function renderLandingView() { // Select Decor Monsters // Left: Genesis Dragon (L3_AAA), Right: Gundam (L3_BAA) - or fallbacks const mLeft = MONSTER_DEFS.find(m => m.id === 'L3_AAA') || MONSTER_DEFS.find(m => m.stage === 3); const mRight = MONSTER_DEFS.find(m => m.id === 'L3_BAA') || MONSTER_DEFS.find(m => m.stage === 3); const svgLeft = generateMonsterSVG(mLeft); const svgRight = generateMonsterSVG(mRight); return `

VIBECODING-怪獸成長營

`; } export function setupLandingEvents(navigateTo) { const joinBtn = document.getElementById('join-btn'); const instructorBtn = document.getElementById('instructor-mode-btn'); const handleJoin = async (roomCode, nickname, forceNew = false) => { try { const { userId, nickname: finalNickname } = await joinRoom(roomCode, nickname, forceNew); // Save Session localStorage.setItem('vibecoding_user_id', userId); localStorage.setItem('vibecoding_room_code', roomCode); localStorage.setItem('vibecoding_nickname', finalNickname); navigateTo('student'); return true; } catch (error) { alert('加入失敗: ' + error.message); return false; } }; joinBtn.addEventListener('click', async () => { const roomCode = document.getElementById('room-code-input').value.trim(); const nickname = document.getElementById('nickname-input').value.trim(); if (!roomCode || !nickname) { alert('請輸入教室代碼和暱稱'); return; } joinBtn.textContent = '檢查中...'; joinBtn.disabled = true; try { // Check conflicts first const conflicts = await checkNicknameConflict(roomCode, nickname); if (conflicts.length > 0) { // Show Conflict Modal showConflictModal(conflicts, nickname, roomCode, navigateTo, handleJoin); joinBtn.textContent = '進入教室'; joinBtn.disabled = false; return; } // No conflict -> direct join await handleJoin(roomCode, nickname); } catch (e) { console.error(e); alert("檢查失敗: " + e.message); joinBtn.textContent = '進入教室'; joinBtn.disabled = false; } }); instructorBtn.addEventListener('click', () => { // Clear any previous admin referer to ensure clean state localStorage.removeItem('vibecoding_admin_referer'); navigateTo('instructor'); }); } function showConflictModal(conflicts, originalNickname, roomCode, navigateTo, handleJoin) { const container = document.getElementById('conflict-modal-container'); const userListHTML = conflicts.map(u => ` `).join(''); container.innerHTML = `

發現相同暱稱

教室裡已經有叫「${originalNickname}」的同學了,請問您是?

${userListHTML}
或者
`; // Bind temporary window functions for the modal buttons window.selectUser = async (targetNickname) => { // Log in as existing document.getElementById('conflict-modal-container').innerHTML = ''; // Close modal await handleJoin(roomCode, targetNickname, false); }; window.createNewUser = async () => { // Create new document.getElementById('conflict-modal-container').innerHTML = ''; // Close modal await handleJoin(roomCode, originalNickname, true); // Force new }; }