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
};
}