import type { AllLeaguesWithCapacityAndScoringDTO } from '@/lib/types/generated/AllLeaguesWithCapacityAndScoringDTO';
import type { LeaguesViewData } from '@/lib/view-data/LeaguesViewData';

/**
 * LeaguesViewDataBuilder
 *
 * Transforms AllLeaguesWithCapacityAndScoringDTO (API DTO) into LeaguesViewData for server-side rendering.
 * Deterministic; side-effect free; no HTTP calls.
 */
export class LeaguesViewDataBuilder {
  static build(apiDto: AllLeaguesWithCapacityAndScoringDTO): LeaguesViewData {
    return {
      leagues: apiDto.leagues.map((league) => ({
        id: league.id,
        name: league.name,
        description: league.description || null,
        logoUrl: league.logoUrl || null,
        ownerId: league.ownerId,
        createdAt: league.createdAt,
        maxDrivers: league.settings.maxDrivers,
        usedDriverSlots: league.usedSlots,
        activeDriversCount: (league as any).activeDriversCount,
        nextRaceAt: (league as any).nextRaceAt,
        maxTeams: undefined, // Not provided in DTO
        usedTeamSlots: undefined, // Not provided in DTO
        structureSummary: league.settings.qualifyingFormat || '',
        timingSummary: league.timingSummary || '',
        category: league.category || null,
        scoring: league.scoring ? {
          gameId: league.scoring.gameId,
          gameName: league.scoring.gameName,
          primaryChampionshipType: league.scoring.primaryChampionshipType,
          scoringPresetId: league.scoring.scoringPresetId,
          scoringPresetName: league.scoring.scoringPresetName,
          dropPolicySummary: league.scoring.dropPolicySummary,
          scoringPatternSummary: league.scoring.scoringPatternSummary,
        } : undefined,
      })),
    };
  }
}