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

describe('GME: Round trip flight - guest invite - custom policy OOP', () => {
  it(
    'C51013: FE - Out of policy booking in the Guest invite',
    { tags: ['@tier2'] },
    () => {
      FlightInterceptApis.interceptFlightsApis();
      LoginPage.createNewCompanyAndLoginWithUserByType({
        providers: [Provider_Type.SABRE_FLIGHT],
        users: [User_Type.ADMIN]
      });
      const flightParams = FlightBookingUtility.initFlightBookingParams({
        flightTripType: FlightTripType.ROUNDTRIP,
        locations: [
          'NYC - All Airports, New York, United States, New York, United States'
        ],
        isItEventSearch: true,
        checkInType: ' Continue without EarlyBird Check-In® '
      });
      Flights.createFlightPolicy('flight-invites');

      cy.updateSplits();

      SplitUtility.isSplitOn('GROUP_TRAVEL_REFACTOR').then((refactored) => {
        if (refactored) {
          GuestTravelUtility.createGuestTravelForTraveler(
            factory.createFlightGuestTravelPolicy
          );
        } else {
          GuestInviteUtility.createGuestInviteForTraveler(
            factory.createFlightGuestInvitePolicy
          );
        }
      });

      Utility.visitSearchPage();
      Flights.setOrigin(flightParams.locations[0]);
      Flights.searchFlightGuest();
      FlightSearchResults.roundtripSearchResult(flightParams);

      FlightCheckout.waitToPageBeLoaded();
      FlightCheckout.setTripInfo();
      FlightCheckout.checkCancellationPolicy();
      FlightCheckout.acceptOutOfPolicyFlightGuestFlow();
      FlightCheckout.updateContactDetails();
      FlightCheckout.checkIn(flightParams.checkInType);
      FlightCheckout.bookAndPay(flightParams);
      FlightCheckout.expectFlightSuccessfullyConfirmed(flightParams.flightConfirmText);
    }
  );
});
