import type { SessionDetailResponse } from '../api/types'; export type GameplayPhase = 'lie' | 'guess' | 'reveal' | 'scoreboard'; export type GameplayPhaseEvent = | 'LIES_LOCKED' | 'GUESSES_LOCKED' | 'SCOREBOARD_READY' | 'NEXT_ROUND'; export interface GameplayTransitionResult { phase: GameplayPhase; changed: boolean; } const TRANSITIONS: Record>> = { lie: { LIES_LOCKED: 'guess' }, guess: { GUESSES_LOCKED: 'reveal' }, reveal: { SCOREBOARD_READY: 'scoreboard' }, scoreboard: { NEXT_ROUND: 'lie' } }; export function transitionGameplayPhase(phase: GameplayPhase, event: GameplayPhaseEvent): GameplayTransitionResult { const next = TRANSITIONS[phase][event] ?? phase; return { phase: next, changed: next !== phase }; } export function allowedGameplayEvents(phase: GameplayPhase): GameplayPhaseEvent[] { return Object.keys(TRANSITIONS[phase]) as GameplayPhaseEvent[]; } export function deriveGameplayPhase(session: SessionDetailResponse | null): GameplayPhase | null { const status = session?.session.status; if (!status) { return null; } if (status === 'lie' || status === 'guess' || status === 'reveal') { return status; } if (status === 'finished') { return 'scoreboard'; } return null; }