const RAPID_API_HOST = "game-forecast-api.p.rapidapi.com";const CHAMPIONS_LEAGUE_ID = 8;const RAPID_API_KEY = "YOUR_RAPIDAPI_KEY";const headers = { "X-RapidAPI-Key": RAPID_API_KEY, "X-RapidAPI-Host": RAPID_API_HOST,};const resultsBody = document.getElementById("results-body");const status = document.getElementById("status");if (!resultsBody || !status) { throw new Error("Required DOM nodes are missing. Check your HTML markup.");}function setStatus(message) { status.textContent = message;}function createCell(text, className) { const cell = document.createElement("td"); cell.textContent = text; if (className) { cell.className = className; } return cell;}function resolveWinner(event) { const finalScore = event.score && event.score.final ? event.score.final : {}; const rawWinner = typeof finalScore.winner === "string" ? finalScore.winner.trim().toLowerCase() : null; if (rawWinner === "home" || rawWinner === "away" || rawWinner === "draw") { return rawWinner; } const homeGoals = typeof finalScore.home === "number" ? finalScore.home : null; const awayGoals = typeof finalScore.away === "number" ? finalScore.away : null; if (homeGoals !== null && awayGoals !== null) { if (homeGoals > awayGoals) return "home"; if (awayGoals > homeGoals) return "away"; return "draw"; } return null;}function getPredictedWinner(event) { const prediction = event.predictions && event.predictions[0] && event.predictions[0].match_result; if (!prediction) { return { label: "-", isCorrect: false }; } const homeProb = Number(prediction.home ?? 0); const drawProb = Number(prediction.draw ?? 0); const awayProb = Number(prediction.away ?? 0); let outcome = "home"; let bestScore = homeProb; if (drawProb > bestScore) { outcome = "draw"; bestScore = drawProb; } if (awayProb > bestScore) { outcome = "away"; bestScore = awayProb; } const resolvedWinner = resolveWinner(event); if (outcome === "draw") { const isCorrect = resolvedWinner === "draw"; return { label: "Draw", isCorrect }; } const predictedTeam = outcome === "home" ? event.team_home.name : event.team_away.name; const isCorrect = resolvedWinner !== null && outcome === resolvedWinner; return { label: predictedTeam, isCorrect };}function renderMatches(matches) { resultsBody.innerHTML = ""; let correct = 0; matches.forEach((event) => { const row = document.createElement("tr"); row.appendChild(createCell(new Date(event.start_at).toLocaleString(), "nowrap")); row.appendChild(createCell(event.team_home.name)); row.appendChild(createCell(event.team_away.name)); const finalScore = event.score && event.score.final ? event.score.final : {}; const scoreText = String(finalScore.home ?? 0) + " - " + String(finalScore.away ?? 0); row.appendChild(createCell(scoreText, "numeric")); const resolvedWinner = resolveWinner(event); const winnerLabel = resolvedWinner === "home" ? event.team_home.name : resolvedWinner === "away" ? event.team_away.name : "Draw"; row.appendChild(createCell(winnerLabel)); const prediction = getPredictedWinner(event); row.appendChild(createCell(prediction.label, "muted")); const outcomeCell = createCell(prediction.isCorrect ? "Correct" : "Miss"); outcomeCell.className = prediction.isCorrect ? "is-success" : "is-error"; row.appendChild(outcomeCell); if (prediction.isCorrect) { correct += 1; } resultsBody.appendChild(row); }); const successRate = matches.length > 0 ? Math.round((correct / matches.length) * 100) : 0; setStatus( "Success rate on the last " + matches.length + " matches: " + successRate + "%." );}async function loadMatches() { setStatus("Loading finished matches…"); try { const url = new URL("https://" + RAPID_API_HOST + "/events"); url.searchParams.set("league_id", String(CHAMPIONS_LEAGUE_ID)); url.searchParams.set("status_code", "FINISHED"); url.searchParams.set("page_size", "10"); url.searchParams.set("start_at_start", "2025-10-15"); const response = await fetch(url, { headers }); if (!response.ok) { throw new Error("Failed to load finished matches"); } const payload = await response.json(); const matches = payload.data || []; if (matches.length === 0) { resultsBody.innerHTML = ""; setStatus("No finished matches found."); return; } renderMatches(matches); } catch (error) { console.error(error); setStatus("Unable to fetch finished matches."); }}loadMatches();