import { OrdersApi } from "omsorgcore-client-ts";
import { configFor, callApi } from "./apiClientHelpers.js";

// Kapselt /api/orders von omsorgCore (OrdersController) über den generierten
// Client (omsorgcore-client-ts). startDate/endDate müssen als Date-Objekte
// übergeben werden - die generierten ...ToJSON-Funktionen rufen .toISOString()
// darauf auf, ein reiner "YYYY-MM-DD"-String aus einem <input type="date">
// würde dabei crashen (siehe auditLogApi.js für dasselbe Muster bei Filtern).
function toDatePayload(payload) {
  return {
    ...payload,
    startDate: payload.startDate ? new Date(payload.startDate) : payload.startDate,
    endDate: payload.endDate ? new Date(payload.endDate) : payload.endDate
  };
}

export async function listOrders(
  accessToken,
  { search, statusId, facilityId, priority, requiredQualification, shiftType, page = 1, pageSize = 20 } = {}
) {
  const api = new OrdersApi(configFor(accessToken));
  return callApi(
    api.apiOrdersGetRaw({ search, statusId, facilityId, priority, requiredQualification, shiftType, page, pageSize })
  );
}

export async function createOrder(accessToken, payload) {
  const api = new OrdersApi(configFor(accessToken));
  return callApi(api.apiOrdersPostRaw({ createOrderRequest: toDatePayload(payload) }));
}

export async function getOrder(accessToken, id) {
  const api = new OrdersApi(configFor(accessToken));
  return callApi(api.apiOrdersIdGetRaw({ id }));
}

export async function updateOrder(accessToken, id, payload) {
  const api = new OrdersApi(configFor(accessToken));
  return callApi(api.apiOrdersIdPutRaw({ id, updateOrderRequest: toDatePayload(payload) }));
}

export async function deleteOrder(accessToken, id) {
  const api = new OrdersApi(configFor(accessToken));
  return callApi(api.apiOrdersIdDeleteRaw({ id }));
}
