import { ReactNode } from 'react';
import { WebsiteConfigurationSearchConfiguration, PortalQsmType } from '@qite/tide-client';
import { PickerItem } from '../shared/types';
export interface QSMConfiguration {
  type?: PortalQsmType;
  searchConfigurations: WebsiteConfigurationSearchConfiguration[];
  askRooms?: boolean;
  askTravelType?: boolean;
  allowOneWay?: boolean;
  allowRoundtrip?: boolean;
  allowOpenJaw?: boolean;
  allowMultiCity?: boolean;
  askTravelClass?: boolean;
  additionalFilters?: AdditionalFilters;
  askTravelers: boolean;
  askNationality?: boolean;
  departureAirport?: BaseFieldConfig;
  destinationAirport?: BaseFieldConfig;
  returnAirport?: BaseFieldConfig;
  destination?: BaseFieldConfig;
  travelTypes?: PickerItem[];
  travelTypeIcon?: ReactNode;
  travelClasses?: PickerItem[];
  travelClassIcon?: ReactNode;
  dateFlexibility?: DateFlexibility[];
  minDate?: Date;
  maxDate?: Date;
  showReturnDate?: boolean;
  datesIcon?: ReactNode;
  defaultTravelers?: number;
  maxTravelers?: number;
  maxChildAge?: number;
  maxInfantAge?: number;
  onSubmit: (data: any) => void;
  submitIcon: ReactNode;
  nationalities: PickerItem[];
  languageCode?: string;
}
export interface BaseFieldConfig {
  fieldKey: string;
  label: string;
  placeholder: string;
  icon: ReactNode;
  options: TypeaheadOption[];
  autoComplete?: boolean;
  onChange?: (data: any) => void;
}
export interface TypeaheadOption {
  key: string;
  value: string;
  iataCode?: string;
  country?: string;
  type: OptionType;
}
export type OptionType = 'country' | 'region' | 'oord' | 'location' | 'airport' | 'hotel' | 'other';
export interface SingleFieldConfig extends BaseFieldConfig {
  type: 'single';
}
export interface DoubleFieldConfig {
  type: 'double';
  fieldKey: string;
  showReverse?: boolean;
  disableReturnField?: boolean;
  fields: BaseFieldConfig[];
}
export type FieldConfig = SingleFieldConfig | DoubleFieldConfig;
export interface AdditionalFilters {
  showDirectFlights: boolean;
  includeLuggage: boolean;
}
export interface DateFlexibility {
  name: string;
  before: number;
  after: number;
}
export type MobileFilterType = 'search' | 'date' | 'traveler' | null;
export type TravelerType = 'adults' | 'kids' | 'babies';
export interface Room {
  adults: number;
  kids: number;
  babies: number;
}
