import { LoginPage } from '@admin-lib/login';
import { Provider_Type, User_Type } from '@support-onboard/index';
import {
  TrainInterceptApis,
  TrainProvider,
  TrainSearch,
  TrainTripType
} from '@train-lib/index';
import { Timeouts } from '@utility-lib/constants';
interface CompanyCreationConfig {
  companySuffix?: TrainProvider | string;
  split?: Provider_Type;
  multipleTravelers?: boolean;
  providers?: Provider_Type[];
  users?: User_Type[];
  phoneNumber?: string;
  feeModelInfo?: string;
}

export class TrainSearchModalUtil {
  static createCompanyWithProviderName(config: CompanyCreationConfig): void {
    TrainInterceptApis.interceptTrainApis();
    const {
      companySuffix,
      split,
      multipleTravelers = false,
      users,
      phoneNumber,
      feeModelInfo
    } = config;
    const providers = split ? [split] : [];

    LoginPage.createNewCompanyAndLoginWithUserByType({
      providers,
      companySuffix,
      users,
      phoneNumber,
      feeModelInfo
    });
    if (multipleTravelers) {
      cy.log('Create new traveler');
      LoginPage.createNewTravelerAndLogin();
    }
  }
  static executeTrainSearch(options: {
    origin: string;
    destination: string;
    tripType: TrainTripType;
    dbSeat?: boolean;
    multipleTravelers?: boolean;
    isConcierge?: boolean;
    date?: boolean;
    guestTraveler?: boolean;
  }): void {
    const {
      origin,
      destination,
      tripType,
      multipleTravelers,

      isConcierge = false,
      date = false,
      guestTraveler = false
    } = options;
    TrainSearch.visitTrainSearch('Business');
    if (multipleTravelers) {
      cy.wait(Timeouts.SHORT_TIMEOUT_2_SEC.timeout);
      TrainSearch.addTraveler();
    }
    if (guestTraveler) {
      cy.log('Create guest traveler');
      TrainSearch.createGuestTraveler();
    }
    TrainSearch.selectTripTileType(tripType);
    TrainSearch.setOrigin(origin);
    TrainSearch.setDestination(destination);
    if (date) {
      TrainSearch.selectTodayDate();
    } else {
      TrainSearch.selectFutureTrainDate();
    }
    if (!isConcierge) {
      cy.log('Search for train');
      TrainSearch.searchTrain();
    }
  }
}
