import {
  airportsEU,
  airportsFrance,
  airportsUS,
  airportsUSWithLocationId,
  airportsWithLocationIdType,
  citiesUS,
  citiesEU,
  pairOfOriginAndDestinationAirportsUS,
  hotelsUS,
  addressUS,
  office,
  depositRequiredHotels,
  multiCityAirportsUS,
  rentalCarGeneralLocation,
  airportsIndia,
  pairOfUSOriginAndDestinationAirportsWithShortName,
  hotelsEU,
  airportLocations
} from '@fixtures/shared/locations';
import {
  AIRPORTS_US_EAST,
  AIRPORTS_US_WEST
} from '@fixtures/shared/locations/airports_us';
import { Random } from './random';

export class LocationUtility {
  static getAirportUS(): string {
    return Random.getRandomValueFromArray(airportsUS);
  }
  static getRentalCarAirportUS(): string {
    return Random.getRandomValueFromArray(airportLocations);
  }
  static getAirportEU(): string {
    return Random.getRandomValueFromArray(airportsEU);
  }

  static getAirportUSWithLocationId(): airportsWithLocationIdType {
    return Random.getRandomValueFromArray(airportsUSWithLocationId);
  }

  static getCityUS(): string {
    return Random.getRandomValueFromArray(citiesUS);
  }

  static getCityEU(): string {
    return Random.getRandomValueFromArray(citiesEU);
  }

  static getHotelUS(): string {
    return Random.getRandomValueFromArray(hotelsUS);
  }

  static getHotelEU(): string {
    return Random.getRandomValueFromArray(hotelsEU);
  }

  static getGeneralRentalCarLocation(): string {
    return Random.getRandomValueFromArray(rentalCarGeneralLocation);
  }

  static getAddressUS(): string {
    return Random.getRandomValueFromArray(addressUS);
  }

  static getDepositRequiredHotels(): string {
    return Random.getRandomValueFromArray(depositRequiredHotels);
  }

  static getAddressUSAsOriginAndDestination(): [string, string] {
    return Random.getTwoUniqueRandomValueFromArray(addressUS);
  }

  static getAirportsUSAsOriginAndDestination(): [string, string] {
    return Random.getTwoUniqueRandomValueFromArray(airportsUS);
  }

  static getRentalCarAirportsUSAsOriginAndDestination(): [string, string] {
    return Random.getTwoUniqueRandomValueFromArray(airportsUS);
  }
  static getAirportsIndiaAsOriginAndUSAsDestination(): [string, string] {
    const origin = Random.getRandomValueFromArray(airportsIndia);
    const destination = LocationUtility.getAirportUS();
    return [origin, destination];
  }

  static getOriginAndDestinationAirportsFrance(): [string, string] {
    return Random.getTwoUniqueRandomValueFromArray(airportsFrance);
  }

  static getPairOfOriginAndDestinationAirportsUS(): string[] {
    return Random.getRandomValueFrom2DArray(pairOfOriginAndDestinationAirportsUS);
  }

  static getRandomAcrossUnitedStatesAirports(): string[] {
    return [
      Random.getRandomValueFromArray(AIRPORTS_US_WEST),
      Random.getRandomValueFromArray(AIRPORTS_US_EAST)
    ];
  }

  static getPairOfOriginAndDestinationAirportsUSWithShortName(): string[] {
    return Random.getRandomValueFrom2DArray(
      pairOfUSOriginAndDestinationAirportsWithShortName
    );
  }

  static getOriginsDestinationsForMultiCity(): string[] {
    return Random.getRandomValueFrom2DArray(multiCityAirportsUS);
  }

  static getCitiesUSAsPickUpAndDropOff(): [string, string] {
    return Random.getTwoUniqueRandomValueFromArray(citiesUS);
  }
  static getOffice(): [string, string] {
    return Random.getTwoUniqueRandomValueFromArray(office);
  }
}
