import { useAtomValue } from "jotai"; import { calcCodeSize, checkGameResultKind, gameStateKindAtom, gamingLeftTimeSecondsAtom, latestGameStatesAtom, } from "../../states/watch"; import type { PlayerProfile } from "../../types/PlayerProfile"; import type { SupportedLanguage } from "../../types/SupportedLanguage"; import FoldableBorderedContainerWithCaption from "../FoldableBorderedContainerWithCaption"; import CodeBlock from "../Gaming/CodeBlock"; import LeftTime from "../Gaming/LeftTime"; import ProblemColumnContent from "../Gaming/ProblemColumnContent"; import RankingTable from "../Gaming/RankingTable"; import Score from "../Gaming/Score"; import ScoreBar from "../Gaming/ScoreBar"; import SubmitStatusLabel from "../SubmitStatusLabel"; import ThreeColumnLayout from "../ThreeColumnLayout"; import TitledColumn from "../TitledColumn"; import UserIcon from "../UserIcon"; type Props = { gameDisplayName: string; playerProfileA: PlayerProfile | null; playerProfileB: PlayerProfile | null; problemTitle: string; problemDescription: string; problemLanguage: SupportedLanguage; sampleCode: string; }; export default function GolfWatchAppGaming1v1({ gameDisplayName, playerProfileA, playerProfileB, problemTitle, problemDescription, problemLanguage, sampleCode, }: Props) { const gameStateKind = useAtomValue(gameStateKindAtom); const leftTimeSeconds = useAtomValue(gamingLeftTimeSecondsAtom)!; const latestGameStates = useAtomValue(latestGameStatesAtom); const stateA = playerProfileA && (latestGameStates[`${playerProfileA.id}`] ?? null); const codeA = stateA?.code ?? ""; const scoreA = stateA?.score ?? null; const statusA = stateA?.status ?? "none"; const stateB = playerProfileB && (latestGameStates[`${playerProfileB.id}`] ?? null); const codeB = stateB?.code ?? ""; const scoreB = stateB?.score ?? null; const statusB = stateB?.status ?? "none"; const codeSizeA = calcCodeSize(codeA, problemLanguage); const codeSizeB = calcCodeSize(codeB, problemLanguage); const gameResultKind = checkGameResultKind(gameStateKind, stateA, stateB); const topBg = gameResultKind ? gameResultKind === "winA" ? "bg-orange-400" : gameResultKind === "winB" ? "bg-purple-400" : "bg-sky-600" : "bg-sky-600"; return (