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

// Kapselt /api/time-entries von omsorgCore (TimeEntriesController) über den generierten Client
// (omsorgcore-client-ts). Anlegen (mit Date-Feldern) passiert nur über omsorgWeb/mitarbeiter-app,
// omsorgapp braucht hier Lesen + Bearbeiten (solange status.isEditableByOwner) + Prüfungs-Entscheidungen.

// date muss als Date-Objekt übergeben werden - siehe absencesApi.js für dasselbe Muster.
function toDatePayload(payload) {
  return {
    ...payload,
    date: payload.date ? new Date(payload.date) : payload.date
  };
}

export async function listTimeEntries(accessToken, { statusId, employeeId, orderId, page = 1, pageSize = 20 } = {}) {
  const api = new TimeEntriesApi(configFor(accessToken));
  return callApi(api.apiTimeEntriesGetRaw({ statusId, employeeId, orderId, page, pageSize }));
}

export async function getTimeEntry(accessToken, id) {
  const api = new TimeEntriesApi(configFor(accessToken));
  return callApi(api.apiTimeEntriesIdGetRaw({ id }));
}

export async function updateTimeEntry(accessToken, id, payload) {
  const api = new TimeEntriesApi(configFor(accessToken));
  return callApi(api.apiTimeEntriesIdPutRaw({ id, updateTimeEntryRequest: toDatePayload(payload) }));
}

export async function submitTimeEntry(accessToken, id) {
  const api = new TimeEntriesApi(configFor(accessToken));
  return callApi(api.apiTimeEntriesIdSubmitPostRaw({ id }));
}

export async function decideTimeEntry(accessToken, id, payload) {
  const api = new TimeEntriesApi(configFor(accessToken));
  return callApi(api.apiTimeEntriesIdDecisionPostRaw({ id, timeEntryDecisionRequest: payload }));
}

export async function deleteTimeEntry(accessToken, id) {
  const api = new TimeEntriesApi(configFor(accessToken));
  return callApi(api.apiTimeEntriesIdDeleteRaw({ id }));
}
