import { ViewModel } from "../contracts/view-models/ViewModel"; import { CurrencyDisplay } from "../display-objects/CurrencyDisplay"; import { DateDisplay } from "../display-objects/DateDisplay"; import type { RenewalAlertViewData } from "../view-data/RenewalAlertViewData"; export class RenewalAlertViewModel extends ViewModel { id: string; name: string; type: 'league' | 'team' | 'driver' | 'race' | 'platform'; renewDate: Date; price: number; constructor(data: RenewalAlertViewData) { super(); this.id = data.id; this.name = data.name; this.type = data.type; this.renewDate = new Date(data.renewDate); this.price = data.price; } get formattedPrice(): string { return CurrencyDisplay.format(this.price); } get formattedRenewDate(): string { return DateDisplay.formatShort(this.renewDate); } get typeIcon() { const icons = { league: 'Trophy', team: 'Users', driver: 'Car', race: 'Flag', platform: 'Megaphone', }; return icons[this.type] || 'Trophy'; } get daysUntilRenewal(): number { const now = new Date(); const diffTime = this.renewDate.getTime() - now.getTime(); return Math.ceil(diffTime / (1000 * 60 * 60 * 24)); } get isUrgent(): boolean { return this.daysUntilRenewal <= 30; } }