import { agents, details, generateBookingAccommodations } 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 packageApi = {
  fetchDetails,
  fetchAgents,
  fetchAccommodationViews
};
export default packageApi;
