import { describe, expect, it } from "vitest";
import { computeCtxBreakdown } from "../src/cli/ui/ctx-breakdown.js";
import type { CacheFirstLoop } from "../src/loop.js";
import type { ChatMessage } from "../src/types.js";

function fakeLoop(messages: ChatMessage[]): CacheFirstLoop {
  return {
    model: "deepseek-v4-flash",
    prefix: { system: "system", toolSpecs: [] },
    log: { toMessages: () => messages, toFullHistory: () => messages },
  } as unknown as CacheFirstLoop;
}

describe("computeCtxBreakdown", () => {
  it("bounds token counting for pathological large tool results", () => {
    const loop = fakeLoop([
      { role: "user", content: "read log" },
      { role: "tool", name: "read_file", tool_call_id: "t1", content: "A".repeat(100_000) },
    ]);

    const t0 = performance.now();
    const breakdown = computeCtxBreakdown(loop);
    const t1 = performance.now();

    expect(breakdown.logTokens).toBeGreaterThan(0);
    expect(breakdown.topTools[0]?.name).toBe("read_file");
    expect(t1 - t0).toBeLessThan(1000);
  });
});