import {
  FlightCheckout,
  Flights,
  FlightTripType,
  FlightInterceptApis
} from '@flight-lib/index';
import { factory } from '@admin-factory/index';
import { FlightUtility, FlightBookingUtility } from '@flight-modal/index';
import { LocationUtility, Utility } from '@utility-lib/index';
import { LoginPage } from '@admin-lib/index';
import { Provider_Type, User_Type } from '@support-onboard/index';
import { SplitUtility } from '@split-lib/index';

describe('GME: Round trip flight - guest invite', () => {
  it.skip(
    'C51009: Should be able to book round trip flight for guest invite',
    { tags: ['@tier1'] },
    () => {
      FlightInterceptApis.interceptFlightsApis();
      LoginPage.createNewCompanyAndLoginWithUserByType({
        providers: [Provider_Type.SABRE_FLIGHT],
        users: [User_Type.ADMIN]
      });
      const flightParams = FlightBookingUtility.initFlightBookingParams({
        flightTripType: FlightTripType.ROUNDTRIP,
        locations: [LocationUtility.getAirportUS()],
        isItEventSearch: true,
        checkInType: ' Continue without EarlyBird Check-In® '
      });

      cy.createGuestInvite(factory.createFlightGuestInvite());
      cy.updateSplits();
      SplitUtility.isSplitOn('GROUP_TRAVEL_REFACTOR').then((refactored) => {
        if (refactored) {
          cy.createGuestTravel(factory.createFlightGuestTravel());
        } else {
          cy.createGuestInvite(factory.createFlightGuestInvite());
        }
      });

      Utility.visitSearchPage();

      Flights.verifyFlightSearchOptionsIsAvailable(flightParams.verticalType);

      cy.allure().logStep(`Airport: [${flightParams.locations[0]}]`);
      Flights.setOrigin(flightParams.locations[0]);
      Flights.searchFlightGuest();
      FlightUtility.runChooseResultFlow(flightParams);

      FlightCheckout.expectNumberOfTravelers(1);
      FlightCheckout.createTripInformation();
      FlightCheckout.checkCancellationPolicy();
      FlightCheckout.updateContactDetails();
      FlightCheckout.checkIn(flightParams.checkInType);
      FlightCheckout.bookAndPay(flightParams);
      FlightCheckout.expectFlightSuccessfullyConfirmed(flightParams.flightConfirmText);
    }
  );
});
