import { describe, expect, it } from "vitest";
import { normalizeDocumentContentResponse } from "@/lib/documents/page-subtree-response";
import type { PageSubtreeProjection } from "@/lib/documents/page-subtree";

describe("page subtree response helpers", () => {
  it("保留服务端返回的 pageSubtree", () => {
    const serverPageSubtree = {
      projectionId: "server_projection",
      projection: "page_tree",
      rootNodeId: "doc_1",
      rootNode: {
        id: "doc_1",
        parentNodeId: null,
        nodeType: "page",
        blockId: null,
        anchorBlockId: null,
        depth: 0,
        metadata: {
          title: "服务端标题",
          textSnippet: null,
          blockType: null,
          headingLevel: null,
          numbering: null,
          childCount: 0,
          order: 0,
          path: ["doc_1"],
        },
      },
      subtree: {
        rootNodeId: "doc_1",
        nodes: [],
      },
      outline: [],
      evidence: [],
      stats: {
        blockCount: 0,
        headingCount: 0,
        evidenceCount: 0,
        maxDepth: 0,
      },
    } satisfies PageSubtreeProjection;

    const normalized = normalizeDocumentContentResponse({
      documentId: "doc_1",
      payload: {
        content: null,
        revision: 1,
        conflictDetectionKey: "doc_1:1",
        pageSubtree: serverPageSubtree,
      },
    });

    expect(normalized.pageSubtree).toBe(serverPageSubtree);
  });

  it("在服务端缺失 pageSubtree 时保留空值", () => {
    const normalized = normalizeDocumentContentResponse({
      documentId: "doc_1",
      title: "测试页面",
      payload: {
        content: [
          {
            id: "heading_1",
            type: "heading",
            props: { level: 1 },
            content: [{ type: "text", text: "章节一" }],
          },
        ],
        revision: 3,
        conflictDetectionKey: "doc_1:3",
      },
    });

    expect(normalized.revision).toBe(3);
    expect(normalized.conflictDetectionKey).toBe("doc_1:3");
    expect(normalized.pageSubtree).toBeNull();
  });
});
