import { FlightBookingUtility, FlightUtility } from '@flight-modal/index';
import { Timeouts, Utility } from '@utility-lib/index';
import { LoginPage } from '@admin-lib/index';
import { Provider_Type, User_Type } from '@support-onboard/index';
import { stagingUsers } from '@fixtures/staging-users';
import { FlightInterceptApis, FlightItinerary, FlightTripType } from '@flight-lib/index';
import { CommerceApiIntercepts } from '@commerce-shared-lib/api-intercepts';
import { LegalData } from 'cypress/artifacts/base/data/legal';

const adminCredentials = Cypress.env('superAdmin').SUPER_ADMIN_PASSWORD;
const adminCreds = Cypress.env('newUser').NEW_USER_PASSWORD;
const legalEntitiesData = LegalData.generateEULegalEntitiesData();
describe('Commerce: UnChangeability| FLIGHT | TwoWay flight Booking and Cancel ', () => {
  beforeEach(() => {
    cy.loginWithAuthToken({
      email: stagingUsers.superAdmin.email,
      password: adminCredentials,
      isSA: true
    });
    LoginPage.createNewCompanyAndLoginWithUserByType({
      providers: [Provider_Type.FARELOGIX_FLIGHT],
      users: [User_Type.ADMIN],
      creditCardInfo: FlightUtility.getDefaultCreditCardInfoForFareLogix()
    });
    CommerceApiIntercepts.interceptCommerceApis();
    FlightInterceptApis.interceptFlightsApis();
  });
  it(
    'C4953846: Flight UnChangeability end to end for cancelable flight',
    { tags: ['@tier1'] },
    () => {
      Utility.createEntity(adminCreds, legalEntitiesData);
      FlightBookingUtility.runBookingFlow(
        FlightBookingUtility.initFlightBookingParams({
          locations: ['FRA', 'BER'],
          flightTripType: FlightTripType.ONEWAY,
          tripTileType: 'Business',
          continueIfNoResultFound: false
        })
      );
      FlightUtility.preCancelDoForcePDF();
      FlightUtility.storeFlightBookingInformation();
      cy.wait(Timeouts.MEDIUM_TIMEOUT_60_SEC.timeout);
      FlightItinerary.cancelFlight();
      FlightUtility.verifyUnchangeableInvoice();
    }
  );
});
