import type { GetEntitySponsorshipPricingResult } from '@core/racing/application/use-cases/GetEntitySponsorshipPricingUseCase';
import { GetEntitySponsorshipPricingResultDTO } from '../dtos/GetEntitySponsorshipPricingResultDTO';

export class GetEntitySponsorshipPricingPresenter {
  private result: GetEntitySponsorshipPricingResultDTO | null = null;

  reset() {
    this.result = null;
  }

  present(output: GetEntitySponsorshipPricingResult | null) {
    if (!output) {
      this.result = {
        entityType: 'season',
        entityId: '',
        pricing: [],
      };
      return;
    }

    this.result = {
      entityType: output.entityType,
      entityId: output.entityId,
      pricing: output.tiers.map(item => ({
        id: item.name,
        level: item.name,
        price: item.price.amount,
        currency: item.price.currency,
      })),
    };
  }

  getViewModel(): GetEntitySponsorshipPricingResultDTO | null {
    return this.result;
  }

  get viewModel(): GetEntitySponsorshipPricingResultDTO {
    if (!this.result) throw new Error('Presenter not presented');
    return this.result;
  }
}
