import type { LeagueConfigFormModel } from '@/lib/types/LeagueConfigFormModel'; import type { LeagueScoringPresetViewModel } from '@/lib/view-models/LeagueScoringPresetViewModel'; export interface CustomPointsConfig { racePoints: number[]; poleBonusPoints: number; fastestLapPoints: number; leaderLapPoints: number; } /** * ScoringConfigurationViewModel * * View model for scoring configuration including presets and custom points */ import { ViewModel } from "../contracts/view-models/ViewModel"; export class ScoringConfigurationViewModel extends ViewModel { readonly patternId?: string; readonly customScoringEnabled: boolean; readonly customPoints?: CustomPointsConfig; readonly currentPreset?: LeagueScoringPresetViewModel; constructor( config: LeagueConfigFormModel['scoring'], presets: LeagueScoringPresetViewModel[], customPoints?: CustomPointsConfig ) { this.patternId = config.patternId; this.customScoringEnabled = config.customScoringEnabled || false; this.customPoints = customPoints; this.currentPreset = config.patternId ? presets.find(p => p.id === config.patternId) : undefined; } /** * Get the active points configuration */ getActivePointsConfig(): CustomPointsConfig { if (this.customScoringEnabled && this.customPoints) { return this.customPoints; } // Return default points if no custom config return { racePoints: [25, 18, 15, 12, 10, 8, 6, 4, 2, 1], poleBonusPoints: 1, fastestLapPoints: 1, leaderLapPoints: 0, }; } }