import {
  TrainInterceptApis,
  TrainSearchModalUtil,
  AgencyCurrency,
  TrainTripType,
  TrainBookingManager,
  CheckoutModal,
  TrainItinerary,
  DeutscheBahnBookingParams,
  ItaloBookingParams,
  TrenItaliaBookingParams,
  SncfBookingParams
} from '@train-lib/index';

interface TrainBookingOptions {
  loyaltyCard: string;
  provider: any;
  origin: string;
  destination: string;
}

const fareTypeMapping: { [key: string]: any } = {
  'Deutsche Bahn': DeutscheBahnBookingParams.FareType.STANDARD,
  Italo: ItaloBookingParams.FareType.STANDARD,
  TrenItalia: TrenItaliaBookingParams.FareType.STANDARD,
  Sncf: SncfBookingParams.FareType.STANDARD
};

export class AutoTrainCard {
  static bookTrainWithAutoAddedLoyaltyCard({
    loyaltyCard,
    provider,
    origin,
    destination
  }: TrainBookingOptions) {
    TrainInterceptApis.interceptTrainApis();
    TrainSearchModalUtil.createCompanyWithProviderName({
      feeModelInfo: AgencyCurrency.Euro
    });
    cy.getUserLoyaltyProgramMemberships();
    TrainSearchModalUtil.executeTrainSearch({
      origin,
      destination,
      tripType: TrainTripType.ONEWAY
    });

    const fareType = fareTypeMapping[provider];
    TrainBookingManager.selectStandardFareAndProcessForCheckout({
      tripType: TrainTripType.ONEWAY,
      fareType,
      loyaltyCard: true
    });
    CheckoutModal.checkout({
      loyaltyCard: true
    });
    TrainItinerary.expectLoyaltyCardDetailsArePresent(loyaltyCard);
  }
}
