import { LoginPage } from '@admin-lib/index';
import {
  BlackCar,
  BlackCarCheckout,
  BlackCarItinerary,
  BlackCarLocation,
  BlackCarSearchResults,
  BlackCarTripType,
  BlackCarUtility
} from '@blackCar-lib/index';
import { User_Type } from '@support-onboard/index';
import { LocationUtility } from '@utility-lib/index';
import {
  airlineInfo,
  blackCarsProvider,
  providerHourlyDisclaimer
} from '@fixtures/black_car';
import { createBookHotelData } from '@fixtures/hotel/booking_data';
import { HotelInterceptApis, HotelItinerary } from '@hotel-lib/index';

describe('Black car: Add to existing trip', () => {
  beforeEach(() => {
    BlackCarUtility.prepareCompanyAndLogin(User_Type.ADMIN);
    cy.enableBlackCarPolicy();
    LoginPage.createHotelBookingForOnBoardingCompany(createBookHotelData());
    HotelInterceptApis.interceptHotelApis();
    const location: BlackCarLocation = {
      location: LocationUtility.getRentalCarAirportUS(),
      airlineInfo: airlineInfo.airlineInfoPickUp
    };
    cy.wrap(location).as('pickUpLocation');
  });

  it(
    'C98187: Should be able to add hourly black car with airport location to existing trip',
    { tags: ['@tier1'] },
    function () {
      const blackCar = 'Black car';
      HotelItinerary.visitItinerary();
      HotelItinerary.viewAndManageItinerary();
      HotelItinerary.addNewTripInCurrentItinerary(blackCar);

      BlackCar.selectTripTileType(BlackCarTripType.HOURLY);
      BlackCar.selectDuration();
      BlackCar.selectPickUpLocation(this.pickUpLocation.location);
      BlackCar.setAirlineDetailsAndVerify(this.pickUpLocation);
      BlackCar.setPickUpAndDropOffDate();
      BlackCar.searchBlackCar();
      BlackCarSearchResults.selectProvider(blackCarsProvider);
      BlackCarSearchResults.selectCar(blackCarsProvider);
      BlackCarCheckout.verifyTripInfoActionsIsNotVisible();
      BlackCarCheckout.verifyLocation(this.pickUpLocation.location);
      BlackCar.getDataFromCachedPickUpDateAndPassToFunction(
        BlackCarCheckout.verifyPickUpDate
      );
      BlackCarCheckout.verifyFlightDetails(this.pickUpLocation);
      BlackCarCheckout.verifyImportantNotesDisclaimer(providerHourlyDisclaimer);
      BlackCarCheckout.expectPaymentMethodPresent();
      BlackCarCheckout.checkOutCar();
      BlackCarCheckout.expectBlackCarBookingSuccessfully();
      BlackCarCheckout.visitItineraryPageFromBookingSuccessModal();
      BlackCarItinerary.waitToBeLoaded();
      BlackCar.getDataFromCachedPickUpDateAndPassToFunction(
        BlackCarItinerary.verifyTripTimelineItem
      );
    }
  );
});
