import { LeagueStandingDTO } from '@/lib/types/generated/LeagueStandingDTO';
import { StandingEntryViewModel } from './StandingEntryViewModel';
import { GetDriverOutputDTO } from '@/lib/types/generated/GetDriverOutputDTO';
import { LeagueMembership } from '@/lib/types/LeagueMembership';

export class LeagueStandingsViewModel {
  standings: StandingEntryViewModel[];
  drivers: GetDriverOutputDTO[];
  memberships: LeagueMembership[];

  constructor(dto: { standings: LeagueStandingDTO[]; drivers: GetDriverOutputDTO[]; memberships: LeagueMembership[] }, currentUserId: string, previousStandings?: LeagueStandingDTO[]) {
    const leaderPoints = dto.standings[0]?.points || 0;
    this.standings = dto.standings.map((entry, index) => {
      const nextPoints = dto.standings[index + 1]?.points || entry.points;
      const previousPosition = previousStandings?.find(p => p.driverId === entry.driverId)?.position;
      return new StandingEntryViewModel(entry, leaderPoints, nextPoints, currentUserId, previousPosition);
    });
    this.drivers = dto.drivers;
    this.memberships = dto.memberships;
  }
}