import { ReactNode } from 'react';
// import { TravelClass, TravelType } from '../shared/types';
import { WebsiteConfigurationSearchConfiguration, PortalQsmType } from '@qite/tide-client';
import { PickerItem } from '../shared/types';

export interface QSMConfiguration {
  type?: PortalQsmType;

  searchConfigurations: WebsiteConfigurationSearchConfiguration[];

  askRooms?: boolean; // hotel || roundTrip
  askTravelType?: boolean; // hotel || roundTrip
  allowOneWay?: boolean; // flight
  allowRoundtrip?: boolean; // flight
  allowOpenJaw?: boolean; // flight
  allowMultiCity?: boolean; // flight
  askTravelClass?: boolean; // flight
  additionalFilters?: AdditionalFilters; // flight
  askTravelers: boolean;
  askNationality?: boolean;

  // Origins and destinations
  departureAirport?: BaseFieldConfig;
  destinationAirport?: BaseFieldConfig;
  returnAirport?: BaseFieldConfig;

  destination?: BaseFieldConfig;

  // Travel types
  travelTypes?: PickerItem[];
  travelTypeIcon?: ReactNode;

  // Travel classes
  travelClasses?: PickerItem[];
  travelClassIcon?: ReactNode;

  // Date flexibility
  dateFlexibility?: DateFlexibility[];
  minDate?: Date;
  maxDate?: Date;
  showReturnDate?: boolean;
  datesIcon?: ReactNode;

  // Travelers
  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;
}
