import type { UseCaseOutputPort } from '@core/shared/application/UseCaseOutputPort'; import type { GetAllTeamsResult } from '@core/racing/application/use-cases/GetAllTeamsUseCase'; import { GetAllTeamsOutputDTO } from '../dtos/GetAllTeamsOutputDTO'; import { TeamStatsStore } from '@adapters/racing/services/TeamStatsStore'; export class AllTeamsPresenter implements UseCaseOutputPort { private model: GetAllTeamsOutputDTO | null = null; reset(): void { this.model = null; } present(result: GetAllTeamsResult): void { const statsStore = TeamStatsStore.getInstance(); this.model = { teams: result.teams.map(team => { const stats = statsStore.getTeamStats(team.id.toString()); return { id: team.id, name: team.name.toString(), tag: team.tag.toString(), description: team.description?.toString() || '', memberCount: team.memberCount, leagues: team.leagues?.map(l => l.toString()) || [], // Add stats fields ...(stats ? { totalWins: stats.totalWins, totalRaces: stats.totalRaces, performanceLevel: stats.performanceLevel, specialization: stats.specialization, region: stats.region, languages: stats.languages, logoUrl: stats.logoUrl, rating: stats.rating, } : { totalWins: 0, totalRaces: 0, performanceLevel: 'beginner', specialization: 'mixed', region: '', languages: [], logoUrl: '', rating: 0, }), }; }), totalCount: result.totalCount ?? result.teams.length, }; } getResponseModel(): GetAllTeamsOutputDTO | null { return this.model; } get responseModel(): GetAllTeamsOutputDTO { if (!this.model) throw new Error('Presenter not presented'); return this.model; } }