document.addEventListener("DOMContentLoaded", () => { fetch("/api/data") .then(res => res.json()) .then(data => { const playerList = document.getElementById("player-list"); const playerDetails = document.getElementById("player-details"); const attacksList = document.getElementById("attacks-list"); // Fill player list Object.keys(data.players).forEach(name => { const div = document.createElement("div"); div.className = "player-item"; div.textContent = name; div.addEventListener("click", () => { showTownSelection(data.players[name]); }); playerList.appendChild(div); }); // Fill incoming attacks panel if (data.attacks.length === 0) { attacksList.innerHTML = "

No incoming attacks

"; } else { data.attacks.forEach(atk => { const div = document.createElement("div"); div.className = "p-2 border-bottom"; div.innerHTML = `${atk.player}: ${atk.target_town} (${atk.units || 'Unknown units'}) ETA: ${atk.eta}`; attacksList.appendChild(div); }); } // Step 1: Show list of towns for selected player function showTownSelection(player) { if (player.error) { playerDetails.innerHTML = `

${player.error}

`; return; } let html = `

${player.player} (${player.player_id})

`; html += `

Last Update: ${player.timestamp}

`; html += `
Select a town:
`; playerDetails.innerHTML = html; // Attach click events for towns document.querySelectorAll(".town-item").forEach(item => { item.addEventListener("click", () => { const townId = parseInt(item.dataset.townid); const selectedTown = player.towns.find(t => t.town_id === townId); showTownDetails(selectedTown); }); }); } // Step 2: Show town data function showTownDetails(town) { let html = `

${town.town_name}

`; html += `

Points: ${town.points} | Population: ${town.population}

`; html += `
Resources
`; html += `
Buildings
`; playerDetails.innerHTML = html; } }); });