import { LoginPage } from '@admin-lib/index';
import { TripsPage } from '../lib';
import { Provider_Type, User_Type } from '@support-onboard/index';
import { FlightInterceptApis } from '@flight-lib/index';
import { Passenger, bookPersonalHotel } from '@hotel-lib/search_model';
import { TripTileType } from '@utility-lib/index';
import { HotelInterceptApis, HotelItinerary } from '@hotel-lib/index';
import { FlightBookingUtility } from '@flight-modal/flight_booking_utility';

const adultAndChildPassengers: Passenger[] = [
  {
    age: 30,
    gender: 'FEMALE'
  },
  {
    age: 12,
    gender: 'FEMALE',
    childAccount: true
  }
];

describe('Trips: Existing user with no active bookings', () => {
  beforeEach(() => {
    LoginPage.createNewCompanyAndLoginWithUserByType({
      providers: [Provider_Type.SABRE_FLIGHT],
      users: [User_Type.PERSONAL_TRAVELER]
    });
    FlightInterceptApis.interceptFlightsApis();
    HotelInterceptApis.interceptHotelApis();
  });

  it(
    'C3048268: Creating a new trip opens the search field on the home page',
    { tags: ['@tier1'] },
    () => {
      TripsPage.visitPage();
      TripsPage.expectNoResultsLinkToExist();
      TripsPage.openNoResultsLink();
      TripsPage.expectHomePage();
      TripsPage.expectEmptyHomePage();
    }
  );

  it('C365935: Merge/Rename trip', { tags: ['@tier3'] }, () => {
    const tripName = 'First Trip';
    const mergedName = 'Merged Trip';

    FlightBookingUtility.bookOneWayFlight('Business');
    TripsPage.renameTrip(tripName);
    FlightBookingUtility.bookRoundTrip('Business');
    TripsPage.visitPage();
    TripsPage.mergeTrip(mergedName);
  });

  // it(
  //   'C127211: Verify canceled trips are displayed as "canceled"',
  //   { tags: ['@tier2'] },
  //   () => {
  //     bookMultiCityTrip('Business');
  //     FlightUtility.runItineraryFlow();
  //     FlightItinerary.cancelFlight();
  //     TripsPage.visitPage();
  //     TripsPage.viewCancelledTrips();
  //   }
  // );
  // TODO: Test case needs to be reworked; cancelled trips are not consistently appearing in the cancelled trips tab

  it('C127213: Verify trips can be searched/filtered', { tags: ['@tier2'] }, () => {
    const tripType: TripTileType = 'Personal';
    const adultAndTwoChildrenPassengers: Passenger[] = [
      ...adultAndChildPassengers,
      {
        age: 11,
        gender: 'MALE',
        childAccount: true
      }
    ];
    bookPersonalHotel(tripType, adultAndTwoChildrenPassengers);
    HotelItinerary.waitToBeLoaded();
    HotelItinerary.verifyHotelItineraryPage();
    HotelItinerary.verifyTripTile(tripType);
    FlightBookingUtility.bookOneWayFlight('Business');
    TripsPage.visitPage();
    TripsPage.verifyFilterByTripType();
    TripsPage.verifyBrowseTripsBy();
    TripsPage.searchByPassenger();
  });
});
