import type { TeamsPageDto } from '@/lib/page-queries/TeamsPageQuery';
import type { TeamsViewData, TeamSummaryData } from '@/lib/view-data/TeamsViewData';
import type { TeamListItemDTO } from '@/lib/types/generated/TeamListItemDTO';
import { RatingDisplay } from '@/lib/display-objects/RatingDisplay';
import { NumberDisplay } from '@/lib/display-objects/NumberDisplay';

/**
 * TeamsViewDataBuilder - Transforms TeamsPageDto into ViewData for TeamsTemplate
 * Deterministic; side-effect free; no HTTP calls
 */
export class TeamsViewDataBuilder {
  static build(apiDto: TeamsPageDto): TeamsViewData {
    const teams: TeamSummaryData[] = apiDto.teams.map((team: TeamListItemDTO): TeamSummaryData => ({
      teamId: team.id,
      teamName: team.name,
      memberCount: team.memberCount,
      logoUrl: team.logoUrl,
      ratingLabel: RatingDisplay.format(team.rating),
      ratingValue: team.rating || 0,
      winsLabel: NumberDisplay.format(team.totalWins || 0),
      racesLabel: NumberDisplay.format(team.totalRaces || 0),
      region: team.region,
      isRecruiting: team.isRecruiting,
      category: team.category,
      performanceLevel: team.performanceLevel,
      description: team.description,
      countryCode: team.region, // Assuming region contains country code for now
    }));

    return { teams };
  }
}
