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

export class BlackCarUtility {
  static blackCarBookingHourly(
    pickUpLocation: string,
    hours: number,
    tripTileType: TripTileType
  ) {
    BlackCarInterceptApis.interceptBlackCarApis();

    BlackCar.visitBlackCarSearch(tripTileType);
    BlackCar.selectTripTileType(BlackCarTripType.HOURLY);
    BlackCar.selectDuration(hours);
    BlackCar.selectPickUpLocation(pickUpLocation);
    BlackCar.setPickUpAndDropOffDate();
    BlackCar.searchBlackCar();

    BlackCarSearchResults.selectCar(blackCarsProvider);

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

    BlackCar.getDataFromCachedPickUpDateAndPassToFunction(
      BlackCarCheckout.verifyPickUpDate
    );

    BlackCarCheckout.verifyLocation(pickUpLocation);
    BlackCarCheckout.verifyImportantNotesDisclaimer(providerHourlyDisclaimer);

    BlackCarCheckout.updateEmailDetails(
      'dummy-' + Random.randomString(6) + '@staging-prime.tripactions.xyz'
    );
    BlackCarCheckout.checkOutCar();
    BlackCarCheckout.storeEstimatedTotal();
    BlackCarCheckout.expectBlackCarBookingSuccessfully();
    BlackCarCheckout.visitItineraryPageFromBookingSuccessModal();

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

  static prepareCompanyAndLogin(userType: User_Type) {
    BlackCarInterceptApis.interceptBlackCarApis();
    LoginPage.createNewCompanyAndLoginWithUserByType({
      providers: [Provider_Type.ALL_CAR],
      users: [userType]
    });
  }
}
