import type { GetEntitySponsorshipPricingResultDto } from '../dtos'; /** * Sponsorship Pricing View Model * * View model for sponsorship pricing data with UI-specific transformations. */ export class SponsorshipPricingViewModel { mainSlotPrice: number; secondarySlotPrice: number; currency: string; constructor(dto: GetEntitySponsorshipPricingResultDto) { this.mainSlotPrice = dto.mainSlotPrice; this.secondarySlotPrice = dto.secondarySlotPrice; this.currency = dto.currency; } /** UI-specific: Formatted main slot price */ get formattedMainSlotPrice(): string { return `${this.currency} ${this.mainSlotPrice.toLocaleString()}`; } /** UI-specific: Formatted secondary slot price */ get formattedSecondarySlotPrice(): string { return `${this.currency} ${this.secondarySlotPrice.toLocaleString()}`; } /** UI-specific: Price difference */ get priceDifference(): number { return this.mainSlotPrice - this.secondarySlotPrice; } /** UI-specific: Formatted price difference */ get formattedPriceDifference(): string { return `${this.currency} ${this.priceDifference.toLocaleString()}`; } /** UI-specific: Discount percentage for secondary slot */ get secondaryDiscountPercentage(): number { if (this.mainSlotPrice === 0) return 0; return Math.round((1 - this.secondarySlotPrice / this.mainSlotPrice) * 100); } }