import { ViewModel } from "../contracts/view-models/ViewModel"; import { CurrencyFormatter } from "../formatters/CurrencyFormatter"; import { DateFormatter } from "../formatters/DateFormatter"; 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 CurrencyFormatter.format(this.price); } get formattedRenewDate(): string { return DateFormatter.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; } }