import { createCoreAPIClient } from "../../coreClient";
import type { DestinationItinerary, ItineraryUnit } from "./types";

const coreClient = createCoreAPIClient();

export async function addDestinationItinerary(payload: {
  content_id: string;
  available_from: string;
  available_to: string;
  max_bookable_units: number;
  commnets?: string;
  destination_id: string;
}) {
  const response = await coreClient<DestinationItinerary>(
    `/admin/v1/destinations/${payload.destination_id}/itineraries`,
    {
      method: "POST",
      body: JSON.stringify({
        content_id: payload.content_id,
        available_from: payload.available_from,
        available_to: payload.available_to,
        max_bookable_units: payload.max_bookable_units,
        comment: payload.commnets,
      }),
    },
  );
  return response;
}

export async function deleteDestinationItinerary(payload: {
  destination_id: string;
  id: string;
}) {
  const response = await coreClient<DestinationItinerary>(
    `/admin/v1/destinations/${payload.destination_id}/itineraries/${payload.id}`,
    {
      method: "DELETE",
    },
  );
  return response;
}

export async function updateDestinationItinerary(payload: {
  available_from?: string;
  available_to?: string;
  max_bookable_units?: number;
  comment?: string;
  destination_id: string;
  id: string;
  is_deleted?: boolean;
  is_active?: boolean;
}) {
  const response = await coreClient<DestinationItinerary>(
    `/admin/v1/destinations/${payload.destination_id}/itineraries/${payload.id}`,
    {
      method: "PATCH",
      body: JSON.stringify(payload),
    },
  );
  return response;
}

export async function addItineraryUnit(payload: {
  destination_id: string;
  itinerary_id: string;
  unit_id: string;
}) {
  const response = await coreClient<ItineraryUnit>(
    `/admin/v1/destinations/${payload.destination_id}/itineraries/${payload.itinerary_id}/units`,
    {
      method: "POST",
      body: JSON.stringify({
        unit_id: payload.unit_id,
      }),
    },
  );
  return response;
}

export async function deleteItineraryUnit(payload: {
  destination_id: string;
  itinerary_id: string;
  id: string;
}) {
  const response = await coreClient<ItineraryUnit>(
    `/admin/v1/destinations/${payload.destination_id}/itineraries/${payload.itinerary_id}/units/${payload.id}`,
    {
      method: "DELETE",
    },
  );

  return response;
}
