Files
gridpilot.gg/core/racing/domain/services/ScoringPresetTimingService.ts

57 lines
1.6 KiB
TypeScript

export type ScoringPresetTimings = {
practiceMinutes?: number;
qualifyingMinutes?: number;
sprintRaceMinutes?: number;
mainRaceMinutes?: number;
sessionCount?: number;
roundsPlanned?: number;
raceDayOfWeek?: number;
raceTimeUtc?: string;
};
/**
* Apply high-level scoring preset semantics to league/session timings.
*
* This encapsulates the mapping between logical scoring presets (sprint, endurance, etc.)
* and their default timing configuration so that UI layers do not need to duplicate
* or interpret preset IDs directly.
*/
export function applyScoringPresetToTimings(
patternId: string,
currentTimings: ScoringPresetTimings,
): ScoringPresetTimings {
const lowerPresetId = patternId.toLowerCase();
let updatedTimings: ScoringPresetTimings = { ...currentTimings };
if (lowerPresetId.includes('sprint') || lowerPresetId.includes('double')) {
updatedTimings = {
...updatedTimings,
practiceMinutes: 15,
qualifyingMinutes: 20,
sprintRaceMinutes: 20,
mainRaceMinutes: 35,
sessionCount: 2,
};
} else if (lowerPresetId.includes('endurance') || lowerPresetId.includes('long')) {
updatedTimings = {
...updatedTimings,
practiceMinutes: 30,
qualifyingMinutes: 30,
mainRaceMinutes: 90,
sessionCount: 1,
};
delete (updatedTimings as { sprintRaceMinutes?: number }).sprintRaceMinutes;
} else {
updatedTimings = {
...updatedTimings,
practiceMinutes: 20,
qualifyingMinutes: 30,
mainRaceMinutes: 40,
sessionCount: 1,
};
delete (updatedTimings as { sprintRaceMinutes?: number }).sprintRaceMinutes;
}
return updatedTimings;
}