import { describe, expect, it, vi } from "vitest";
import type { AgentApiClient } from "./client";
import { fetchAgentBootstrap, fetchAgentSessions } from "./swr";

describe("Agent API SWR helpers", () => {
  it("loads bootstrap data with a normalized UI registry", async () => {
    const client = {
      getUiRegistry: vi.fn(async () => ({
        schema_version: "agent-ui-registry@1",
        chart_grammars: ["echarts-safe-subset"],
        components: [{ id: "HistoryPanel", supportedSurfaces: ["side_panel", "unknown"] }],
        actions: [{ id: "zoom_to_map", supportedSurfaces: ["map_overlay"] }]
      })),
      getModels: vi.fn(async () => ({
        defaultModel: "model-a",
        models: [{ id: "model-a", label: "Model A", description: "Default model", icon: "sparkle" }]
      }))
    } as Pick<AgentApiClient, "getUiRegistry" | "getModels"> as AgentApiClient;

    await expect(fetchAgentBootstrap(client)).resolves.toEqual({
      defaultModel: "model-a",
      models: [{ id: "model-a", label: "Model A", description: "Default model", icon: "sparkle" }],
      registry: {
        schema_version: "agent-ui-registry@1",
        chart_grammars: ["echarts-safe-subset"],
        components: [{ id: "HistoryPanel", supportedSurfaces: ["side_panel"] }],
        actions: [{ id: "zoom_to_map", supportedSurfaces: ["map_overlay"] }]
      }
    });
  });

  it("loads session summaries through the shared client", async () => {
    const sessions = [
      {
        id: "session-1",
        title: "会话",
        createdAt: 1,
        updatedAt: 2
      }
    ];
    const client = {
      listSessions: vi.fn(async () => sessions)
    } as Pick<AgentApiClient, "listSessions"> as AgentApiClient;

    await expect(fetchAgentSessions(client)).resolves.toBe(sessions);
  });
});
