import {
  TrainItinerary,
  TrainInterceptApis,
  TrainBookings,
  AmtrakBookingParams,
  TrainTripType
} from '@train-lib/index';
import { InvoiceValidation } from '@commerce-lib/trains/invoice_validations';
import { LoginPage } from '@admin-lib/index';
import { Emea_Fee_Types } from '@support-commerce/data_model/fee_types';
import { stagingUsers } from '@fixtures/staging-users';
import { TripFeeValidation } from '@commerce-lib/tripfee/trip_fee_validation';
import { Invoice } from '@commerce-lib/invoice/invoice';
import { CommerceApiIntercepts } from '@commerce-shared-lib/api-intercepts';
import { CommerceShared } from '@commerce-shared-lib/shared';
import { User_Type } from '@support-onboard/index';

const tripFeeInvoicePageUSD = '$7.00';
const adminCredentials = Cypress.env('superAdmin').SUPER_ADMIN_PASSWORD;
const emeaFeeModelType = Emea_Fee_Types.EMEA_FEE_MODEL_B_USD_N;

const emeaFeesTagSet: Array<string> = [
  'inventoryTypeRail',
  'bookingOnline',
  'serviceAreaIntl',
  'tripOnline',
  'booking1'
];

describe('Commerce: TRAIN | USD | BUSINESS | BOOKING Test | ', () => {
  beforeEach(() => {
    cy.loginWithAuthToken({
      email: stagingUsers.superAdmin.email,
      password: adminCredentials,
      isSA: true
    });
    TripFeeValidation.getAndStoreFeeModelUUID(emeaFeeModelType);
    TripFeeValidation.getTripFeeUsingFeeModelUUID(emeaFeesTagSet);
    LoginPage.createNewCompanyAndLoginWithUserByType({
      users: [User_Type.TRAVELER],
      feeModelInfo: emeaFeeModelType
    });
    CommerceApiIntercepts.interceptCommerceApis();
    TrainInterceptApis.interceptTrainApis();
  });

  it(
    'C1204616: Should be able to book one way train ticket',
    { tags: ['@tier1'] },
    () => {
      TrainBookings.createBooking({
        origin: AmtrakBookingParams.Location.NewYork,
        destination: AmtrakBookingParams.Location.Washington,
        tripType: TrainTripType.ONEWAY
      });
      InvoiceValidation.storeTrainItineraryTripData();
      TrainItinerary.checkTripFeeOnItinerarySummarySection(tripFeeInvoicePageUSD);
      TrainItinerary.waitToBeLoaded();
      CommerceShared.visitViewInvoicePage();
      Invoice.retrieveDownloadInvoiceFile();
      Invoice.retrieveAndConvertPDFInvoiceDetailsToHTML();
      InvoiceValidation.checkBookingId();
    }
  );
});
