import type { PuzzleRunSnapshot } from '../../../packages/shared/src/contracts/puzzleRuntimeSession'; export function mergePuzzleServiceRuntimeState( currentRun: PuzzleRunSnapshot, serviceRun: PuzzleRunSnapshot, ): PuzzleRunSnapshot { if (!currentRun.currentLevel || !serviceRun.currentLevel) { return currentRun; } const serviceLevel = serviceRun.currentLevel; const leaderboardEntries = serviceLevel.leaderboardEntries.length > 0 ? serviceLevel.leaderboardEntries : serviceRun.leaderboardEntries; // 中文注释:拼块布局和通关状态由前端即时裁决;后端快照只合并榜单与下一关 handoff。 return { ...currentRun, runId: serviceRun.runId, entryProfileId: serviceRun.entryProfileId, clearedLevelCount: Math.max( currentRun.clearedLevelCount, serviceRun.clearedLevelCount, ), recommendedNextProfileId: serviceRun.recommendedNextProfileId, nextLevelMode: serviceRun.nextLevelMode, nextLevelProfileId: serviceRun.nextLevelProfileId, nextLevelId: serviceRun.nextLevelId, recommendedNextWorks: serviceRun.recommendedNextWorks, leaderboardEntries, currentLevel: { ...currentRun.currentLevel, leaderboardEntries: leaderboardEntries.length > 0 ? leaderboardEntries : currentRun.currentLevel.leaderboardEntries, }, }; }