import { createCoreAPIClient } from "@/lib/features/coreClient";
import { addDestinationUnitOccupancy } from "./occupancy/action";
import { addDestinationUnitTravellerPermissions } from "./traveller-permissions/action";
import type { DestinationUnit } from "./types";

const coreClient = createCoreAPIClient();

export async function addDestinationUnit(payload: {
  code: string;
  destination_id: string;
}) {
  const response = await coreClient<DestinationUnit>(
    `/admin/v1/destinations/${payload.destination_id}/units`,
    {
      method: "POST",
      body: JSON.stringify({
        code: payload.code,
      }),
    },
  );
  if (response?.data?.id) {
    // Prefill
    await addDestinationUnitOccupancy({
      occupancies: [
        {
          type: "ADULT",
          max_occupancy: 0,
          min_age: 20,
          max_age: 72,
        },
        {
          type: "CHILDREN",
          max_occupancy: 0,
          min_age: 7,
          max_age: 19,
        },
        {
          type: "INFANTS",
          max_occupancy: 0,
          min_age: 1,
          max_age: 6,
        },
      ],
      unit_id: response.data.id,
      destination_id: payload.destination_id,
    });

    // Prefill
    await addDestinationUnitTravellerPermissions({
      travellerPermissions: [
        { type: "LEGAL OWNERS", is_allowed: true },
        { type: "FAMILY MEMBERS", is_allowed: true },
      ],
      unit_id: response.data.id,
      destination_id: payload.destination_id,
    });
  }
  return response;
}

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

export async function updateDestinationUnit(payload: {
  destination_id: string;
  id: string;
  code?: string;
  unit_id?: string;
  is_active?: boolean;
  is_reservation_allowed?: boolean;
  is_deleted?: boolean;
}) {
  const response = await coreClient<DestinationUnit>(
    `/admin/v1/destinations/${payload.destination_id}/units/${payload.id}`,
    {
      method: "PATCH",
      body: JSON.stringify({
        code: payload.code,
        unit_id: payload.unit_id,
        is_active: payload.is_active,
        is_reservation_allowed: payload.is_reservation_allowed,
        is_deleted: payload.is_deleted,
      }),
    },
  );
  return response;
}
