'use client'; import type { LeagueScoringConfigViewModel } from '@/lib/view-models/LeagueScoringConfigViewModel'; import { Trophy, Clock, Target, Zap, Info } from 'lucide-react'; type LeagueScoringConfigUi = LeagueScoringConfigViewModel & { scoringPresetName?: string; dropPolicySummary?: string; championships?: Array<{ id: string; name: string; type: 'driver' | 'team' | 'nations' | 'trophy' | string; sessionTypes: string[]; pointsPreview: Array<{ sessionType: string; position: number; points: number }>; bonusSummary: string[]; dropPolicyDescription?: string; }>; }; interface LeagueScoringTabProps { scoringConfig: LeagueScoringConfigViewModel | null; practiceMinutes?: number; qualifyingMinutes?: number; sprintRaceMinutes?: number; mainRaceMinutes?: number; } export default function LeagueScoringTab({ scoringConfig, practiceMinutes, qualifyingMinutes, sprintRaceMinutes, mainRaceMinutes, }: LeagueScoringTabProps) { if (!scoringConfig) { return (

No Scoring System

Scoring configuration is not available for this league yet

); } const ui = scoringConfig as unknown as LeagueScoringConfigUi; const championships = ui.championships ?? []; const primaryChampionship = championships.find((c) => c.type === 'driver') ?? championships[0]; const resolvedPractice = practiceMinutes ?? 20; const resolvedQualifying = qualifyingMinutes ?? 30; const resolvedSprint = sprintRaceMinutes; const resolvedMain = mainRaceMinutes ?? 40; return (

Scoring overview

{scoringConfig.gameName}{' '} {ui.scoringPresetName ? `• ${ui.scoringPresetName}` : '• Custom scoring'}{' '} {ui.dropPolicySummary ? `• ${ui.dropPolicySummary}` : ''}

{primaryChampionship && (

Weekend structure & timings

{primaryChampionship.sessionTypes.map((session: string) => ( {session} ))}

Practice

{resolvedPractice ? `${resolvedPractice} min` : '—'}

Qualifying

{resolvedQualifying} min

Sprint

{resolvedSprint ? `${resolvedSprint} min` : '—'}

Main race

{resolvedMain} min

)}
{championships.map((championship) => (

{championship.name}

{championship.type === 'driver' ? 'Driver championship' : championship.type === 'team' ? 'Team championship' : championship.type === 'nations' ? 'Nations championship' : 'Trophy championship'}

{championship.sessionTypes.length > 0 && (
{championship.sessionTypes.map((session: string) => ( {session} ))}
)}
{championship.pointsPreview.length > 0 && (

Points preview (top positions)

{championship.pointsPreview.map((row, index: number) => { const typedRow = row as { sessionType: string; position: number; points: number }; return ( ); })}
Session Position Points
{typedRow.sessionType} P{typedRow.position} {typedRow.points}
)} {championship.bonusSummary.length > 0 && (

Bonus points

    {championship.bonusSummary.map((item: string, index: number) => (
  • {item}
  • ))}
)}

Drop score policy

{championship.dropPolicyDescription ?? ''}

))}
); }