import { SCORE_CATEGORIES, ALL_CATEGORIES, calculateTotals, isGameComplete } from './gameLogic.js';
import { getPlayers, getRecentGames, getHighScores } from './supabase.js';
// Funktion för att rendera poängkortet
export function renderScorecard(gameData, scorecardHead, scorecardBody) {
const players = gameData.players;
const scores = gameData.scores;
const isFinished = gameData.isFinished;
const currentPlayerId = isFinished ? null : gameData.players[gameData.currentPlayerIndex]?.id;
scorecardHead.innerHTML = `
`;
const playerTotals = calculateTotals(gameData);
let bodyHtml = '';
const renderCategoryRow = (cat) => {
return `
| ${cat.name} |
${players.map(p => {
const score = scores[p.id]?.[cat.id];
const scoreText = (score === null || score === undefined) ? '' : score;
const isFilled = (score !== null && score !== undefined);
const filledClass = isFilled ? 'filled' : '';
const disabledClass = isFinished ? 'score-cell-disabled' : '';
const currentColClass = p.id === currentPlayerId ? 'current-player-col' : '';
return `
${scoreText}
| `;
}).join('')}
`;
};
SCORE_CATEGORIES.upper.forEach(cat => bodyHtml += renderCategoryRow(cat));
bodyHtml += `
| Summa | ${players.map(p => `${playerTotals[p.id].upperSum} | `).join('')}
| Bonus | ${players.map(p => `${playerTotals[p.id].upperBonus} | `).join('')}
| Övre Summa | ${players.map(p => `${playerTotals[p.id].upperTotal} | `).join('')}
`;
SCORE_CATEGORIES.lower.forEach(cat => bodyHtml += renderCategoryRow(cat));
bodyHtml += `| Nedre Summa | ${players.map(p => `${playerTotals[p.id].lowerTotal} | `).join('')}
`;
if (isFinished) {
bodyHtml += `| Totalsumma | ${players.map(p => `${playerTotals[p.id].grandTotal} | `).join('')}
`;
}
scorecardBody.innerHTML = bodyHtml;
// Anropa funktionen för att koppla event listeners efter att poängkortet har renderats
if (typeof attachScorecardEventListeners === 'function') {
attachScorecardEventListeners();
}
}
// Funktion för att rendera topplistan för spelare
export async function renderPlayerLeaderboard() {
const container = document.getElementById('player-leaderboard');
if (!container) return;
try {
const players = await getPlayers();
players.sort((a, b) => (b.wins || 0) - (a.wins || 0));
if (players.length === 0) {
container.innerHTML = 'Inga spelare har lagts till än.
';
} else {
let html = '';
players.forEach((p, index) => {
const medal = index === 0 ? '👑' : '';
html += `
-
${index + 1}. ${p.name} ${medal}
${p.wins || 0} vinster
`;
});
html += '
';
container.innerHTML = html;
}
} catch (error) {
console.error("Error rendering leaderboard:", error);
container.innerHTML = `Kunde inte ladda topplistan.
`;
}
}
// Funktion för att rendera topplistan för högsta poäng
export async function renderHighScores() {
const container = document.getElementById('high-score-list');
if (!container) return;
try {
const games = await getHighScores();
if (games.length === 0) {
container.innerHTML = 'Inga avslutade spel än.
';
} else {
let html = '';
games.forEach((game, index) => {
const medal = index === 0 ? '🥇' : (index === 1 ? '🥈' : (index === 2 ? '🥉' : ''));
html += `
-
${index + 1}. ${game.winnerName} ${medal}
${game.winnerScore} p
`;
});
html += '
';
container.innerHTML = html;
}
} catch (error) {
console.error("Error rendering high scores:", error);
container.innerHTML = `Kunde inte ladda topplistan.
`;
}
}
// Funktion för att rendera de senaste spelen
export async function renderRecentGames() {
const container = document.getElementById('recent-games-list');
if (!container) return;
try {
const games = await getRecentGames();
if (games.length === 0) {
container.innerHTML = 'Inga avslutade spel än.
';
} else {
let html = '';
games.forEach(game => {
const date = new Date(game.finishedAt).toLocaleDateString('sv-SE');
html += `
-
${game.winnerName}
${game.winnerScore} p
${date}
`;
});
html += '
';
container.innerHTML = html;
}
} catch (error) {
console.error("Error rendering recent games:", error);
container.innerHTML = `Kunde inte ladda senaste spel.
`;
}
}