import { Configuration } from "omsorgcore-client-ts";
import { API_BASE } from "./config.js";

// Baut die Configuration für eine generierte *Api-Klasse (omsorgcore-client-ts).
// credentials:"include" ist nötig, damit der Browser die HttpOnly-Refresh-Token-Cookie
// auf /api/auth/* mitschickt bzw. entgegennimmt (siehe omsorgCore/CLAUDE.md, "Auth-Flow").
export function configFor(accessToken) {
  return new Configuration({ basePath: API_BASE, accessToken, credentials: "include" });
}

// Wandelt den Aufruf einer generierten `...Raw()`-Methode in denselben
// Vertrag um, den vorher httpClient.request(...) lieferte: { ok, status, data, error? }.
// Generierte Clients werfen bei Nicht-2xx eine ResponseError-Exception statt ein
// Ergebnisobjekt zurückzugeben - das fangen wir hier zentral ab.
export async function callApi(rawPromise) {
  try {
    const response = await rawPromise;
    const data = await response.value();
    return { ok: true, status: response.raw.status, data: data === undefined ? null : data };
  } catch (err) {
    if (err && err.name === "ResponseError") {
      const status = err.response.status;
      let data = null;
      try {
        data = await err.response.json();
      } catch {
        data = null;
      }
      return { ok: false, status, data };
    }
    return { ok: false, status: 0, data: null, error: err && err.message };
  }
}
