import { Kart } from '../../kart';
import type { Game, GameKartState } from '../Game';
import type { KartRankingItem } from '../KartRankingItem';
import type { KartProgress } from './KartProgress';
import { KartLapTimes, LapTime } from './LapTime';

export interface RaceKartState extends GameKartState {
  currentLap: number;
}

export interface RaceRakingItem extends KartRankingItem {
  progress: number;
  lapsCompleted: number;
}

export interface Race extends Game {
  type: 'Race';
  laps: number;
  kartsState: Record<string, RaceKartState>;
  kartsProgress: Record<string, KartProgress[]>;
  gameRanking: RaceRakingItem[];
}

export interface RankingWithKartsAndLapTimes extends RaceRakingItem {
  lapTimes: LapTime[];
  fastestLap: LapTime | null;
}

export interface RaceWithDetailedRanking extends Omit<Race, 'kartsProgress'> {
  gameRanking: RankingWithKartsAndLapTimes[];
}
