import { ViewModel } from "../contracts/view-models/ViewModel"; import { CurrencyFormatter } from "../formatters/CurrencyFormatter"; import { DateFormatter } from "../formatters/DateFormatter"; import { MembershipFeeTypeFormatter } from "../formatters/MembershipFeeTypeFormatter"; import type { MembershipFeeViewData } from "../view-data/MembershipFeeViewData"; export class MembershipFeeViewModel extends ViewModel { private readonly data: MembershipFeeViewData; constructor(data: MembershipFeeViewData) { super(); this.data = data; } get id(): string { return this.data.id; } get leagueId(): string { return this.data.leagueId; } get seasonId(): string | undefined { return this.data.seasonId; } get type(): string { return this.data.type; } get amount(): number { return this.data.amount; } get enabled(): boolean { return this.data.enabled; } get createdAt(): string { return this.data.createdAt; } get updatedAt(): string { return this.data.updatedAt; } /** UI-specific: Formatted amount */ get formattedAmount(): string { return CurrencyFormatter.format(this.amount, 'EUR'); } /** UI-specific: Type display */ get typeDisplay(): string { return MembershipFeeTypeFormatter.format(this.type); } /** UI-specific: Status display */ get statusDisplay(): string { return this.enabled ? 'Enabled' : 'Disabled'; } /** UI-specific: Status color */ get statusColor(): string { return this.enabled ? 'green' : 'red'; } /** UI-specific: Formatted created date */ get formattedCreatedAt(): string { return DateFormatter.formatShort(this.createdAt); } /** UI-specific: Formatted updated date */ get formattedUpdatedAt(): string { return DateFormatter.formatShort(this.updatedAt); } }