import { LoginPage } from '@admin-lib/index';
import { Provider_Type, User_Type } from '@support-onboard/index';
import {
  TeamEventsInterceptApis,
  EventDetails,
  EventsWorkflow
} from '@group-events-lib/index';

import { Invitations } from 'cypress/e2e/gme/group_events/lib/invitations';
import { FlightBookingUtility, FlightUtility } from '@flight-modal/index';
import {
  FlightInterceptApis,
  FlightCheckout,
  Flights,
  FlightTripType
} from '@flight-lib/index';

describe.skip('GME: Group travel: Flight - Booking with +1 guest', () => {
  it.skip(
    'C51003: Book a flight with a guest in group travel',
    { tags: ['@tier1'] },
    () => {
      const location = 'Zurich';
      const eventName = 'Team Event';
      // values for days comes from EventsWorkflow.createDraftEvent() where hardcoded
      const dayBefore = '16';
      const dayAfter = '19';
      const numberOfTravelers = 2;

      FlightInterceptApis.interceptFlightsApis();
      const flightBookingParams = FlightBookingUtility.initFlightBookingParams({
        locations: ['Berlin Brandenburg'],
        flightTripType: FlightTripType.ROUNDTRIP,
        isItEventSearch: true
      });
      LoginPage.createNewCompanyAndLoginWithUserByType({
        providers: [Provider_Type.SABRE_FLIGHT],
        users: [User_Type.ADMIN]
      });

      TeamEventsInterceptApis.teamEventIntercept();

      EventsWorkflow.createDraftEvent(location, eventName);
      EventDetails.setEventParticipant();
      EventDetails.allowExtraGuest();
      EventDetails.saveChanges();
      EventDetails.sendInvite();
      EventDetails.expectTeamEventCreated();
      Invitations.expandInvitationsMenu();
      Invitations.selectInvitationsMenuElement(eventName);
      Invitations.verifyInvitationName(eventName);
      Invitations.verifyInvitationLocation(location);
      Invitations.verifyInvitationEventStartDate(dayBefore);
      Invitations.verifyInvitationEventEndDate(dayAfter);
      Invitations.verifyFlightDepartureDate(dayBefore);
      Invitations.verifyFlightReturnDate(dayAfter);
      Invitations.verifyNumberOfTravelers(1);
      Invitations.createGuestTraveller();
      Invitations.verifyNumberOfTravelers(numberOfTravelers);
      Flights.setOrigin(flightBookingParams.locations[0]);
      Flights.searchFlightGuest();
      FlightUtility.runChooseResultFlow(flightBookingParams);
      FlightCheckout.saveTripInformation();
      FlightCheckout.checkCancellationPolicy();
      FlightCheckout.acceptOutOfPolicyFlight();
      FlightCheckout.updateContactDetails();
      FlightCheckout.validateIfPassportAndVisaInfoRequired();
      FlightCheckout.verifyNumberOfTravelers(numberOfTravelers);
      FlightCheckout.checkInSeveralForPassengers(numberOfTravelers, 'Skip');
      FlightCheckout.bookAndPay(flightBookingParams);
    }
  );
});
