import type { ScreenCommand, ScreenMode, SaveScreenPlanReq, } from './api/generated/crabs/evening_detective_server/index.js' import type { ScreenPlan } from '../src/types/screen.js' const modes = [ 'SCREEN_MODE_UNSPECIFIED', 'SCREEN_MODE_COVER', 'SCREEN_MODE_INTRO', undefined, 'SCREEN_MODE_CONCLUSION', undefined, 'SCREEN_MODE_RESULTS', 'SCREEN_MODE_TIMER', 'SCREEN_MODE_TEXT', 'SCREEN_MODE_QR', 'SCREEN_MODE_TEAMS', ] as const satisfies readonly (ScreenMode | undefined)[] const commands = [ 'SCREEN_COMMAND_UNSPECIFIED', 'SCREEN_COMMAND_PLAY', 'SCREEN_COMMAND_PAUSE', 'SCREEN_COMMAND_RESUME', 'SCREEN_COMMAND_STOP', 'SCREEN_COMMAND_REPLAY', 'SCREEN_COMMAND_SEEK', 'SCREEN_COMMAND_VOLUME', 'SCREEN_COMMAND_TIMER_START', 'SCREEN_COMMAND_TIMER_PAUSE', 'SCREEN_COMMAND_TIMER_RESUME', 'SCREEN_COMMAND_TIMER_RESET', ] as const satisfies readonly ScreenCommand[] export function apiScreenMode(mode: number): ScreenMode { const value = modes[mode] if (!value) throw new Error('Некорректный режим экрана') return value } export function apiScreenCommand(command: number): ScreenCommand { const value = commands[command] if (!value) throw new Error('Некорректная команда экрана') return value } export function apiPlan(plan: ScreenPlan): Pick { return { ...plan, steps: plan.steps.map((step) => ({ ...step, mode: apiScreenMode(step.mode), qrUrl: step.qrUrl, timerType: apiTimerType(step.timerType), })), } } export function apiTimerType(value = 0) { return ( [ 'SCREEN_TIMER_TYPE_BREAK', 'SCREEN_TIMER_TYPE_BEFORE_GAME', 'SCREEN_TIMER_TYPE_UNTIL_END', ] as const )[value]! }