import { FlightBookingUtility, FlightUtility } from '@flight-modal/index';
import { Utility } from '@utility-lib/index';
import { LoginPage } from '@admin-lib/login';
import { Provider_Type } from '@support-onboard/data_model/provider_type';
import { stagingUsers } from '@fixtures/staging-users';
import { FlightInterceptApis, FlightItinerary, FlightTripType } from '@flight-lib/index';
import { FlightsInvoiceValidation } from '@commerce-lib/flights/invoice_validation';
import { User_Type } from '@support-onboard/data_model/user_type';
import { Invoice } from '@commerce-lib/invoice/invoice';
import { CommerceApiIntercepts } from '@commerce-lib/index';
import { amexBTAPlatformType, amexBTARegion } from '@commerce-lib/constants';
import { LegalData } from 'cypress/artifacts/base/data/legal';

const adminCreds = Cypress.env('newUser').NEW_USER_PASSWORD;
const legalEntitiesData = LegalData.generateEULegalEntitiesData();
const adminCredentials = Cypress.env('superAdmin').SUPER_ADMIN_PASSWORD;

describe('Commerce: DE (Berlin) | FLIGHT | VAT validations', () => {
  beforeEach(() => {
    CommerceApiIntercepts.interceptCommerceApis();
    cy.loginWithAuthToken({
      email: stagingUsers.superAdmin.email,
      password: adminCredentials,
      isSA: true
    });
    LoginPage.createNewCompanyAndLoginWithUserByType({
      providers: [Provider_Type.FARELOGIX_FLIGHT],
      users: [User_Type.ADMIN],
      creditCardInfo: FlightUtility.getSandboxCreditCardInfoForAmex()
    });
    Utility.addAmexBTAEUPaymentUuId(amexBTAPlatformType.EU);
    FlightInterceptApis.interceptFlightsApis();
  });
  it('C7941571: DE| LH | FLIGHT | VAT validations', { tags: ['@tier2'] }, () => {
    Utility.createEntity(adminCreds, legalEntitiesData);
    FlightBookingUtility.runBookingFlow(
      FlightBookingUtility.initFlightBookingParams({
        locations: ['FRA', 'BER'],
        flightTripType: FlightTripType.ONEWAY,
        tripTileType: 'Business',
        continueIfNoResultFound: true
      })
    );
    FlightsInvoiceValidation.getLedgerDataByBookingUUID();
    Utility.loginAsAdmin(adminCreds);
    FlightItinerary.goToItineraryPage();
    FlightItinerary.waitToBeLoaded();
    FlightItinerary.getFlightDetail();
    FlightsInvoiceValidation.getTravelerName();
    FlightsInvoiceValidation.storeTotalPrice();
    FlightUtility.storeFlightBookingInformation();
    FlightsInvoiceValidation.visitViewTripFeePage();
    Invoice.retrieveDownloadInvoiceFile();
    Invoice.retrieveAndConvertPDFInvoiceDetailsToHTML();
    FlightsInvoiceValidation.validateVatAmount();
  });
});
