import { Network, ServerMessage } from './network.js'; const container = document.getElementById('lobby'); let net; let rooms = []; let currentRoom = null; let errorMessage = ''; let connected = false; let nickname = 'cacto-' + Math.floor(Math.random() * 1000); function roomRow(room) { const full = room.players >= room.max_players; return `
  • ${room.name} ${room.mode} ${room.players}/${room.max_players} ${room.state}
  • `; } function errorBanner() { return errorMessage ? `

    ! ${errorMessage}

    ` : ''; } function renderLobbyView() { const dis = connected ? '' : 'disabled'; container.innerHTML = `
    ${errorBanner()} ${connected ? '' : '

    подключение...

    '}
    `; } function renderRoomView() { container.innerHTML = `
    ${errorBanner()}

    room ${currentRoom.name}

    режим: ${currentRoom.mode}

    `; } function render() { if (currentRoom) { renderRoomView(); } else { renderLobbyView(); } } container?.addEventListener('click', (e) => { const btn = e.target.closest('[data-action]'); if (!btn) return; errorMessage = ''; switch (btn.dataset.action) { case 'create': net.createRoom(btn.dataset.mode); break; case 'join': net.joinRoom(btn.dataset.roomId); break; case 'leave': currentRoom = null; net.leaveRoom(); render(); break; case 'refresh': net.listRooms(); break; } }); container?.addEventListener('change', (e) => { if (e.target.id === 'nickname-input') { nickname = e.target.value.trim() || nickname; } }); export function initLobby() { net = new Network(); net.on('_open', () => net.hello(nickname)); net.on(ServerMessage.HELLO_ACK, () => { connected = true; net.listRooms(); }); net.on('_close', () => { connected = false; render(); }); net.on(ServerMessage.LOBBY_ROOMS, (payload) => { rooms = payload.rooms; render(); }); net.on(ServerMessage.LOBBY_ROOM_JOINED, (payload) => { currentRoom = payload; render(); }); net.on(ServerMessage.LOBBY_ROOM_UPDATED, (payload) => { if (currentRoom) { currentRoom.players = payload.players; render(); } }); net.on(ServerMessage.ERROR, (payload) => { console.error('[gameserver] error:', payload); errorMessage = payload.message; render(); }); render(); return net; }