import { api } from "./api.js"; import { handleAuthError, renderAllSuggestions, renderCounts, renderMySuggestions, renderPhasePill, renderPhaseTitles, renderResults, renderVotes, renderWelcome, setAuthUI, syncVoteScores } from "./ui.js"; import { state, clearUserState } from "./state.js"; export async function loadState() { const [me, stateData] = await Promise.all([api.me(), api.state()]); state.isAuthenticated = true; state.me = me; state.prevPhase = state.phase; state.phase = stateData.currentPhase; state.resultsOpen = stateData.resultsOpen; state.counts = stateData; if (state.prevPhase !== state.phase && state.phase === "Vote") { state.votesRendered = false; } setAuthUI(true); renderWelcome(); renderPhasePill(); renderCounts(); } export async function loadSuggestData() { if (state.phase !== "Suggest") return; state.mySuggestions = await api.mySuggestions(); renderMySuggestions(); } export async function loadRevealData() { if (state.phase === "Reveal" || state.phase === "Vote" || state.phase === "Results") { const latest = await api.allSuggestions(); const latestSig = signatureSuggestions(latest); const changed = latestSig !== state.allSuggestionsSig; state.allSuggestions = latest; state.allSuggestionsSig = latestSig; renderAllSuggestions(); renderPhaseTitles(); if (state.phase === "Vote" && changed) { state.votesRendered = false; } } } export async function loadVoteData() { if (state.phase !== "Vote") return; const votes = await api.myVotes(); state.myVotes = votes; if (!state.votesRendered) { renderVotes(); state.votesRendered = true; } else { syncVoteScores(); } } export async function loadResults() { if (state.phase !== "Results" || !state.resultsOpen) return; state.results = await api.results(); renderResults(); } export async function refreshPhaseData() { try { await loadState(); await Promise.all([loadSuggestData(), loadRevealData(), loadResults()]); if (state.phase === "Vote") { if (!state.votesRendered) await loadVoteData(); } else { state.votesRendered = false; await loadVoteData(); } } catch (err) { if (handleAuthError(err, clearUserState)) return; throw err; } } export function signatureSuggestions(list) { return JSON.stringify( list.map((s) => [ s.id, s.name, s.genre, s.description, s.screenshotUrl, s.youtubeUrl, s.gameUrl, s.minPlayers, s.maxPlayers, ]), ); } // expose for UI handlers that call back in window.refreshPhaseData = refreshPhaseData; window.loadSuggestData = loadSuggestData; window.loadVoteData = loadVoteData; window.handleAuthError = (err) => handleAuthError(err, clearUserState);