52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
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,
|
|
};
|
|
}
|
|
} |