import {
  type PageSubtreeProjection,
} from "@/lib/documents/page-subtree";

export type DocumentContentResponseLike = {
  content?: unknown;
  revision?: number | null;
  conflict_detection_key?: string | null;
  conflictDetectionKey?: string | null;
  page_subtree?: PageSubtreeProjection | null;
  pageSubtree?: PageSubtreeProjection | null;
  title?: string | null;
};

export type NormalizedDocumentContentResponse = {
  content: unknown;
  revision: number;
  conflictDetectionKey: string;
  pageSubtree: PageSubtreeProjection | null;
};

export function normalizeDocumentContentResponse(input: {
  documentId: string;
  title?: string | null;
  payload?: DocumentContentResponseLike | null;
}): NormalizedDocumentContentResponse {
  const payload = input.payload ?? null;
  const content = payload?.content ?? null;
  const revision =
    typeof payload?.revision === "number" && Number.isInteger(payload.revision)
      ? payload.revision
      : 0;
  const conflictDetectionKey = (
    typeof payload?.conflictDetectionKey === "string" && payload.conflictDetectionKey.trim()
      ? payload.conflictDetectionKey
      : typeof payload?.conflict_detection_key === "string" && payload.conflict_detection_key.trim()
        ? payload.conflict_detection_key
        : `${input.documentId}:0`
  );
  const pageSubtree = payload?.pageSubtree ?? payload?.page_subtree ?? null;

  return {
    content,
    revision,
    conflictDetectionKey,
    pageSubtree,
  };
}
