/// <reference lib="dom" />
import { expect } from "e2e";
import { mkdir, writeFile } from "node:fs/promises";
import { join } from "node:path";
import { T3_HOME } from "../e2e.config.ts";
import { test, WEB } from "./t3.ts";

test("Usage refetches a recent cache missing an upstream-listed model", WEB, async ({ t3, app, screen, browser }) => {
  const model = "claude-haiku-5-5";
  const response = await fetch("https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json");
  if (!response.ok) throw new Error(`Upstream rates: ${response.status}`);
  const document = await response.json() as Record<string, unknown>;
  const keys = Object.keys(document).filter(key => key.includes(model));
  if (!keys.length) throw new Error("Upstream must list the fixture model");
  for (const key of keys) delete document[key];
  await writeFile(join(T3_HOME, "userdata/usage-model-rates.json"), JSON.stringify({ fetchedAtMs: Date.now() - 180_000, document }));
  const transcripts = join(process.env.CLAUDE_CONFIG_DIR!, "projects", "rates-demo");
  await mkdir(transcripts, { recursive: true });
  await writeFile(join(transcripts, "rates-demo.jsonl"), JSON.stringify({
    type: "assistant", timestamp: new Date().toISOString(), requestId: "req_rates_demo", sessionId: "rates-demo",
    message: { id: "msg_rates_demo", model, usage: { input_tokens: 17000, output_tokens: 800 } }
  }) + "\n");
  await t3.project("Rates demo");
  await t3.open("/usage");
  await screen.getByRole("button", "Cost", { exact: true }).tap();
  await screen.getByRole("button", "All providers", { exact: true }).tap();
  await screen.getByRole("menuitemcheckbox", "All providers", { exact: true }).tap();
  await screen.getByRole("menuitemcheckbox", "Claude Code", { exact: true }).tap();
  await browser.keyboard.press("Escape");
  await screen.getByRole("button", model, { exact: true }).waitFor({ state: "visible" });
  // Wait for the full scan, without forcing a usage or rate refresh.
  await screen.getByRole("button", "Refresh usage", { exact: true }).waitFor({ state: "visible" });
  await expect.poll(() => browser.evaluate(() => document.querySelector('[aria-label="Refresh usage"]')?.getAttribute("aria-busy"))).not.toBe("true");
  await app.screenshot("usage-cost-after-scan");
  await expect(screen.getByText("Unpriced", { exact: true })).toBeHidden();
});
