import { agents, details, generateBookingAccommodations, getCountries } from '@qite/tide-client';
import {
  BookingPackage,
  BookingPackageDetailsRequest,
  BookingPackageRequest,
  BookingTravelAgent,
  GenerateBookingAccommodationRequest,
  TideResponse
} from '@qite/tide-client/build/types';
import { ApiSettingsState } from '../../../shared/types';
import { buildTideClientConfig } from '../../../shared/utils/tide-api-utils';

const fetchDetails = async (
  request: BookingPackageRequest<BookingPackageDetailsRequest>,
  signal: AbortSignal,
  languageCode?: string,
  apiSettings?: ApiSettingsState
): Promise<TideResponse<BookingPackage>> => {
  const tideClientConfig = buildTideClientConfig(apiSettings);
  return await details(tideClientConfig, request, signal, languageCode);
};

const fetchAgents = async (signal: AbortSignal, apiSettings?: ApiSettingsState): Promise<BookingTravelAgent[]> => {
  const tideClientConfig = buildTideClientConfig(apiSettings);
  return await agents(tideClientConfig, signal);
};

const fetchAccommodationViews = async (request: GenerateBookingAccommodationRequest, signal: AbortSignal, apiSettings?: ApiSettingsState) => {
  const tideClientConfig = buildTideClientConfig(apiSettings);
  return await generateBookingAccommodations(tideClientConfig, request, signal);
};

const fetchCountries = async (signal: AbortSignal, apiSettings?: ApiSettingsState) => {
  const tideClientConfig = buildTideClientConfig(apiSettings);
  return await getCountries(tideClientConfig, signal);
};

const packageApi = {
  fetchDetails,
  fetchAgents,
  fetchAccommodationViews,
  fetchCountries
};
export default packageApi;
