document.addEventListener("DOMContentLoaded", () => {
let buildingNames = {};
let unitNames = {};
// Fetch building names first
fetch("/api/buildings")
.then(res => res.json())
.then(data => {
buildingNames = data;
});
// Fetch unit names
fetch("/api/units")
.then(res => res.json())
.then(data => {
unitNames = data;
});
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:
`;
player.towns.forEach(town => {
html += `-
${town.town_name}
`;
});
html += `
`;
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);
showTownMenu(selectedTown);
});
});
}
// Step 2: Show town menu
function showTownMenu(town) {
let html = `${town.town_name}
`;
html += `Select info to view:
`;
html += `
`;
playerDetails.innerHTML = html;
const infoSelect = document.getElementById("town-info-select");
const infoDisplay = document.getElementById("town-info-display");
function renderInfo(option) {
let displayHTML = "";
if (option === "main") {
displayHTML += `Main Info
`;
displayHTML += `
- Sea: ${town.sea}
- Wood: ${town.wood}
- Stone: ${town.stone}
- Iron: ${town.iron}
- Population: ${town.population}
- Points: ${town.points}
`;
displayHTML += `Buildings
`;
Object.entries(town.buildings).forEach(([b, lvl]) => {
if (b !== "id") {
const name = buildingNames[b]?.name || b;
displayHTML += `- ${name}: ${lvl}
`;
}
});
displayHTML += `
`;
} else if (option === "buildingOrder") {
displayHTML += `Building Order
`;
town.buildingOrder.forEach(b => {
const name = buildingNames[b.building_type]?.name || b.building_type;
displayHTML += `- ${name} (ID: ${b.id}) - To complete at: ${b.to_be_completed_at}
`;
});
displayHTML += `
`;
} else if (option === "researches") {
displayHTML += `Researches
`;
Object.entries(town.researches).forEach(([r, val]) => {
if (r !== "id" && val) displayHTML += `- ${r}
`;
});
displayHTML += `
`;
} else if (option === "units") {
displayHTML += `Units
`;
Object.entries(town.units).forEach(([u, val]) => {
const name = unitNames[u]?.name || u; // <-- Use Greek name mapping
displayHTML += `- ${name}: ${val}
`;
});
displayHTML += `
`;
}
infoDisplay.innerHTML = displayHTML;
}
// Initial render
renderInfo(infoSelect.value);
// Update on selection change
infoSelect.addEventListener("change", () => {
renderInfo(infoSelect.value);
});
}
});
});