import type { Team, TeamMembership } from '@gridpilot/racing/domain/entities/Team'; import type { IDriverTeamPresenter, DriverTeamViewModel, } from '@gridpilot/racing/application/presenters/IDriverTeamPresenter'; export class DriverTeamPresenter implements IDriverTeamPresenter { private viewModel: DriverTeamViewModel | null = null; present( team: Team, membership: TeamMembership, driverId: string ): DriverTeamViewModel { const isOwner = team.ownerId === driverId; const canManage = membership.role === 'owner' || membership.role === 'manager'; this.viewModel = { team: { id: team.id, name: team.name, tag: team.tag, description: team.description, ownerId: team.ownerId, leagues: team.leagues, specialization: team.specialization as 'endurance' | 'sprint' | 'mixed' | undefined, region: team.region, languages: team.languages, }, membership: { role: membership.role, joinedAt: membership.joinedAt.toISOString(), isActive: membership.isActive, }, isOwner, canManage, }; return this.viewModel; } getViewModel(): DriverTeamViewModel { if (!this.viewModel) { throw new Error('Presenter has not been called yet'); } return this.viewModel; } }