import type { Team } from '@gridpilot/racing/domain/entities/Team'; import type { TeamMembership } from '@gridpilot/racing/domain/types/TeamMembership'; import type { ITeamDetailsPresenter, TeamDetailsViewModel, } from '@gridpilot/racing/application/presenters/ITeamDetailsPresenter'; export class TeamDetailsPresenter implements ITeamDetailsPresenter { private viewModel: TeamDetailsViewModel | null = null; present( team: Team, membership: TeamMembership | null, driverId: string ): TeamDetailsViewModel { const canManage = membership?.role === 'owner' || membership?.role === 'manager'; const viewModel: TeamDetailsViewModel = { team: { id: team.id, name: team.name, tag: team.tag, description: team.description, ownerId: team.ownerId, leagues: team.leagues, }, membership: membership ? { role: membership.role === 'driver' ? 'member' : membership.role, joinedAt: membership.joinedAt.toISOString(), isActive: membership.status === 'active', } : null, canManage, }; this.viewModel = viewModel; return viewModel; } getViewModel(): TeamDetailsViewModel { if (!this.viewModel) { throw new Error('Presenter has not been called yet'); } return this.viewModel; } }