import { Provider_Type } from '@support-onboard/index';

const ON = 'on';

export class SplitUtility {
  public static checkOnlyRelevantSplitIsOn(providers: Provider_Type[]): void {
    providers.forEach((value) => {
      this.checkSplit(this.getSplitNameByProvider(value), true);
    });
  }

  public static isSplitOn(splitName: string): Cypress.Chainable<boolean> {
    return cy.task('getDataFromCache', 'splitList').then((splitList: any) => {
      return splitList[splitName] === ON;
    });
  }

  private static checkSplit(splitName: string, isOn: boolean): void {
    if (this.isSplitsObjectExist()) {
      this.isSplitOn(splitName).then((res) => {
        expect(isOn, 'User should be support on ' + splitName).to.equal(res);
      });
    }
  }

  private static isSplitsObjectExist(): Cypress.Chainable<boolean> {
    return cy.task('getDataFromCache', 'splitList').then((splitList: any) => {
      return splitList?.length > 0;
    });
  }

  private static getSplitNameByProvider(provider: Provider_Type): string {
    switch (provider) {
      case Provider_Type.MOCK_FLIGHT:
        return 'FLIGHT_PROVIDER_MOCK';
      case Provider_Type.AMADEUS_FLIGHT:
        return 'FLIGHT_PROVIDER_AMADEUS';
      case Provider_Type.FARELOGIX_FLIGHT:
        return 'FLIGHT_PROVIDER_FARELOGIX';
      case Provider_Type.SABRE_FLIGHT:
        return 'FLIGHT_PROVIDER_SABRE';
      case Provider_Type.AMTRAK_RAIL:
        return 'TRAIN_INVENTORY_FAKEPROVIDER_ALL';
      case Provider_Type.EXPEDIA_FLIGHT:
        return 'FLIGHT_PROVIDER_EXPEDIA';
      case Provider_Type.NDC_EXCHANGE_FLIGHT:
        return 'FLIGHT_PROVIDER_NDC_EXCHANGE';
      case Provider_Type.PRICELINE_FLIGHT:
        return 'FLIGHT_PROVIDER_PRICELINE';
      case Provider_Type.SOUTHWEST_FLIGHT:
        return 'FLIGHT_PROVIDER_SOUTHWEST';
      case Provider_Type.TRAVELFUSION_FLIGHT:
        return 'FLIGHT_PROVIDER_TRAVELFUSION';
      case Provider_Type.VERTEIL_FLIGHT:
        return 'FLIGHT_PROVIDER_VERTEIL';

      case Provider_Type.ALL_CAR:
        return 'CAR_PROVIDER_PRICELINE';

      case Provider_Type.CAR_PROVIDER_AMADEUS:
        return 'CAR_PROVIDER_AMADEUS';

      case Provider_Type.EXPEDIA_HOTEL:
        return 'HOTEL_PROVIDER_EXPEDIA';
      case Provider_Type.PRICELINE_HOTEL:
        return 'HOTEL_PROVIDER_PRICELINE';

      case Provider_Type.TRAIN_FAKE_PROVIDER:
        return 'TRAIN_INVENTORY_FAKEPROVIDER_ALL';
      case Provider_Type.TRAIN_FAKE_PROVIDER_CARRIER:
        return 'TRAIN_INVENTORY_FAKEPROVIDER_FAKECARRIER_1';

      case Provider_Type.TRAIN_OVER_FLIGHTS:
        return 'TRAIN_OVER_FLIGHTS';
      case Provider_Type.TRAIN_INVENTORY_TRAINLINE_OUIGO:
        return 'TRAIN_INVENTORY_TRAINLINE_OUIGO';

      default:
        return '';
    }
  }
}
