Initial commit v1
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
/**
|
||||
* Returns the number of handicap strokes a player receives on a given hole.
|
||||
* WHS allocation: distribute course_handicap strokes across holes by stroke index.
|
||||
*/
|
||||
export function strokesReceived(
|
||||
courseHandicap: number,
|
||||
strokeIndex: number,
|
||||
holesCount: number,
|
||||
): number {
|
||||
if (courseHandicap <= 0) return 0
|
||||
const fullStrokes = Math.floor(courseHandicap / holesCount)
|
||||
const extraStrokes = courseHandicap % holesCount
|
||||
return fullStrokes + (strokeIndex <= extraStrokes ? 1 : 0)
|
||||
}
|
||||
|
||||
/**
|
||||
* Net score on a hole (gross strokes minus strokes received).
|
||||
*/
|
||||
export function netStrokes(
|
||||
gross: number,
|
||||
courseHandicap: number,
|
||||
strokeIndex: number,
|
||||
holesCount: number,
|
||||
): number {
|
||||
return gross - strokesReceived(courseHandicap, strokeIndex, holesCount)
|
||||
}
|
||||
|
||||
/**
|
||||
* Score vs par as a display string: "−2", "E", "+1", "+3"
|
||||
*/
|
||||
export function formatVsPar(diff: number): string {
|
||||
if (diff === 0) return 'E'
|
||||
return diff > 0 ? `+${diff}` : `${diff}`
|
||||
}
|
||||
|
||||
/**
|
||||
* CSS class for a gross score vs par (standard golf scorecard conventions).
|
||||
*/
|
||||
export function scoreColorClass(vsPar: number | null): string {
|
||||
if (vsPar === null) return ''
|
||||
if (vsPar <= -2) return 'bg-yellow-300 text-yellow-900 rounded-full' // Eagle or better
|
||||
if (vsPar === -1) return 'bg-red-500 text-white rounded-full' // Birdie
|
||||
if (vsPar === 0) return '' // Par
|
||||
if (vsPar === 1) return 'border border-border rounded-sm' // Bogey
|
||||
if (vsPar === 2) return 'border-2 border-border rounded-sm' // Double
|
||||
return 'border-2 border-destructive rounded-sm text-destructive' // Triple+
|
||||
}
|
||||
Reference in New Issue
Block a user