import { createCoreAPIClient } from "@/lib/features/coreClient";
import { getAdminActivityLogs } from "@/lib/features/activity-logs/query";
import type { CoreResponse } from "@/lib/features/types";
import type {
  EDMBrowseResult,
  EDMFolder,
  EDMStorageTarget,
  EDMTemplate,
} from "./types";
import { getSessionOptions } from "@/lib/cookies";

const coreClient = createCoreAPIClient();

/** One folder's own contents. Pass null for the root. */
export async function browseEDMFolder(
  folderId: string | null,
  headers?: HeadersInit,
): Promise<CoreResponse<EDMBrowseResult>> {
  const qs = folderId ? `?folder_id=${encodeURIComponent(folderId)}` : "";
  return coreClient<EDMBrowseResult>(`/v1/admin-console/edm/browse${qs}`, {
    method: "GET",
    headers,
  });
}

export async function listEDMFolders(
  headers?: HeadersInit,
): Promise<CoreResponse<EDMFolder[]>> {
  return coreClient<EDMFolder[]>("/v1/admin-console/edm/folders", {
    method: "GET",
    headers,
  });
}

export async function listEDMTemplates(
  headers?: HeadersInit,
): Promise<CoreResponse<EDMTemplate[]>> {
  return coreClient<EDMTemplate[]>("/v1/admin-console/edm", {
    method: "GET",
    headers,
  });
}

export async function getEDMTemplate(
  templateId: string,
  headers?: HeadersInit,
): Promise<CoreResponse<EDMTemplate>> {
  return coreClient<EDMTemplate>(`/v1/admin-console/edm/${templateId}`, {
    method: "GET",
    headers,
  });
}

export async function getEDMLogs(
  templateId: string | null,
  page: number,
  pageSize: number,
) {
  const search = templateId
    ? `admin-console/edm/${templateId}`
    : "admin-console/edm";
  return getAdminActivityLogs(
    {
      search,
      method: ["POST", "PUT", "PATCH", "DELETE"],
      page,
      pageSize,
    },
    new Request(
      typeof window !== "undefined" ? window.location.href : "http://localhost",
    ),
  );
}

/** Where new EDMs are stored, plus whether the caller can change it. */
export async function getEDMStorageTarget(
  request?: Request,
): Promise<CoreResponse<EDMStorageTarget>> {
  const options = getSessionOptions(request);
  return coreClient<EDMStorageTarget>("/v1/admin-console/edm/storage-target", {
    method: "GET",
    headers: { ...options },
  });
}
