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

// Kapselt /api/absences von omsorgCore (AbsencesController) über den generierten Client
// (omsorgcore-client-ts). Anlegen (mit Date-Feldern) passiert nur über omsorgWeb/mitarbeiter-app,
// omsorgapp braucht hier Lesen + Bearbeiten (solange "Eingereicht") + Entscheiden (Genehmigen/Ablehnen).

// startDate/endDate müssen als Date-Objekte übergeben werden - siehe ordersApi.js für dasselbe Muster.
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 listAbsences(accessToken, { status, type, employeeId, page = 1, pageSize = 20 } = {}) {
  const api = new AbsencesApi(configFor(accessToken));
  return callApi(api.apiAbsencesGetRaw({ status, type, employeeId, page, pageSize }));
}

export async function getAbsence(accessToken, id) {
  const api = new AbsencesApi(configFor(accessToken));
  return callApi(api.apiAbsencesIdGetRaw({ id }));
}

export async function updateAbsence(accessToken, id, payload) {
  const api = new AbsencesApi(configFor(accessToken));
  return callApi(api.apiAbsencesIdPutRaw({ id, updateAbsenceRequest: toDatePayload(payload) }));
}

export async function decideAbsence(accessToken, id, payload) {
  const api = new AbsencesApi(configFor(accessToken));
  return callApi(api.apiAbsencesIdDecisionPostRaw({ id, absenceDecisionRequest: payload }));
}

export async function deleteAbsence(accessToken, id) {
  const api = new AbsencesApi(configFor(accessToken));
  return callApi(api.apiAbsencesIdDeleteRaw({ id }));
}
