import { describe, expect, it } from "vitest";
import { renderRequest } from "../../apps/web/src/app.js";
import { resolveRoute } from "../../apps/web/src/router.js";

describe("I1 URL truth and non-happy states", () => {
  it("UI-ROUTE-001 restores Project tab and Queue selection from URL", () => {
    expect(resolveRoute("/projects/project-i1?tab=goals")).toMatchObject({
      kind: "project",
      tab: "goals",
    });
    expect(resolveRoute("/projects/project-i1/queue?view=graph&task=task-ui")).toMatchObject({
      kind: "queue",
      tab: "graph",
      task: "task-ui",
    });
  });

  it("UI-ROUTE-002 restores Review file/finding and FactoryRun tab selection", () => {
    expect(
      resolveRoute(
        "/changesets/CS-001?tab=files&file=src%2Fapplication%2Fqueue.ts&finding=cross-plan",
      ),
    ).toMatchObject({
      kind: "review",
      tab: "files",
      file: "src/application/queue.ts",
      finding: "cross-plan",
    });
    expect(resolveRoute("/factory-runs/FR-001?tab=timeline&task=AR-017")).toMatchObject({
      kind: "factory-run",
      tab: "timeline",
      task: "AR-017",
    });
  });

  it("UI-STATE-001 renders Project loading/empty/error/permission/stale explicitly", () => {
    for (const [fixture, marker] of [
      ["project-loading", "Loading Project Overview"],
      ["project-empty", "New Project"],
      ["project-error", "failed to refresh"],
      ["project-permission", "Read-only Project access"],
      ["project-stale", "Project data is stale"],
    ] as const) {
      expect(
        renderRequest(`/projects/project-i1?fixture=${fixture}`, { fixtureMode: true }),
      ).toContain(marker);
    }
  });

  it("UI-STATE-002 keeps Search in the approved shell position but inert until I3", () => {
    const page = renderRequest("/projects/project-i1");
    expect(page).toContain('aria-label="Search — planned for I3"');
    expect(page).toContain("disabled");
    expect(page).toContain("⌘K");
  });
});
