import {
  BlackCar,
  BlackCarCheckout,
  BlackCarItinerary,
  BlackCarLocation,
  BlackCarInterceptApis,
  BlackCarSearchResults
} from '@blackCar-lib/index';
import { LoginPage } from '@admin-lib/index';
import { TripTileType, Random } from '@utility-lib/index';
import { blackCarsProvider } from '@fixtures/black_car';
import { Provider_Type, User_Type } from '@support-onboard/index';

export class BlackCarBookingModel {
  static blackCarBookingOneWay = (
    pickUpLocation: BlackCarLocation,
    dropOffLocation: BlackCarLocation,
    tripTileType: TripTileType
  ) => {
    BlackCarInterceptApis.interceptBlackCarApis();

    BlackCar.visitBlackCarSearch(tripTileType);

    BlackCar.selectPickUpLocation(pickUpLocation.location);

    BlackCar.setAirlineDetailsAndVerify(pickUpLocation);
    BlackCar.selectDropOffLocation(dropOffLocation.location);

    BlackCar.setAirlineDetailsAndVerify(dropOffLocation);
    BlackCar.setPickUpAndDropOffDate();

    BlackCar.searchBlackCar();
    BlackCarSearchResults.selectCar(blackCarsProvider);

    BlackCarCheckout.waitToBeLoaded();
    BlackCarCheckout.setTripInfo();

    BlackCarCheckout.verifyLocation(pickUpLocation.location);
    BlackCarCheckout.verifyLocation(dropOffLocation.location);

    BlackCar.getDataFromCachedPickUpDateAndPassToFunction(
      BlackCarCheckout.verifyPickUpDate
    );

    BlackCarCheckout.verifyFlightDetails(pickUpLocation);
    BlackCarCheckout.verifyFlightDetails(dropOffLocation);

    BlackCarCheckout.updateEmailDetails(
      'dummy-' + Random.randomString(5) + '@staging-prime.tripactions.xyz'
    );

    BlackCarCheckout.storeEstimatedTotal();
    BlackCarCheckout.expectPaymentMethodPresent();
    BlackCarCheckout.checkOutCar();
    BlackCarCheckout.expectBlackCarBookingSuccessfully();
    BlackCarCheckout.visitItineraryPageFromBookingSuccessModal();

    BlackCarItinerary.verifyBlackCarItineraryPage();
    BlackCarItinerary.verifyTripTile(tripTileType);
    BlackCarItinerary.getDataFromCachedEstimatedTotalAndVerify();
  };

  static blackCarEnablePolicy = () => {
    LoginPage.createNewCompanyAndLoginWithUserByType({
      providers: [Provider_Type.ALL_CAR],
      users: [User_Type.ADMIN]
    });
    cy.enableBlackCarPolicy();
    BlackCarInterceptApis.interceptBlackCarApis();
  };
}
