import { readFileSync } from "node:fs";
import { describe, expect, it } from "vitest";
import {
  buildBreadcrumbListJsonLd,
  resolveDocsBreadcrumbs,
  resolveDocsTopic,
} from "./docs-breadcrumbs";
import { SITE_URL } from "./page-meta";

describe("docs breadcrumbs", () => {
  it("stops the hub trail at Docs", () => {
    expect(resolveDocsBreadcrumbs("en", "/en/docs")).toEqual([
      { name: "Home", href: "/en" },
      { name: "Docs" },
    ]);
    expect(resolveDocsBreadcrumbs("zh", "/zh/docs/")).toEqual([
      { name: "首页", href: "/zh" },
      { name: "文档" },
    ]);
  });

  it("names the category and topic on a first-party docs page", () => {
    expect(resolveDocsBreadcrumbs("en", "/en/docs/mcp")).toEqual([
      { name: "Home", href: "/en" },
      { name: "Docs", href: "/en/docs" },
      { name: "Extending" },
      { name: "MCP" },
    ]);
    expect(resolveDocsBreadcrumbs("zh", "/zh/docs/modes/")).toEqual([
      { name: "首页", href: "/zh" },
      { name: "文档", href: "/zh/docs" },
      { name: "核心概念" },
      { name: "模式" },
    ]);
    expect(resolveDocsTopic("en", "/en/docs/guide")?.id).toBe("guide");
  });

  it("emits BreadcrumbList with absolute Home → Docs → topic URLs", () => {
    const schema = buildBreadcrumbListJsonLd("en", "/en/docs/sandbox");
    expect(schema["@type"]).toBe("BreadcrumbList");
    expect(schema.itemListElement).toEqual([
      {
        "@type": "ListItem",
        position: 1,
        name: "Home",
        item: `${SITE_URL}/en`,
      },
      {
        "@type": "ListItem",
        position: 2,
        name: "Docs",
        item: `${SITE_URL}/en/docs`,
      },
      {
        "@type": "ListItem",
        position: 3,
        name: "Sandbox & Approval",
        item: `${SITE_URL}/en/docs/sandbox`,
      },
    ]);
  });

  it("renders the trail from the docs shell", () => {
    const layout = readFileSync(new URL("../app/[locale]/docs/layout.tsx", import.meta.url), "utf8");
    expect(layout).toContain("<DocsBreadcrumb locale={locale} />");
    expect(layout).toContain('import { DocsBreadcrumb } from "@/components/docs-breadcrumb"');
  });
});