import { describe, expect, it } from "vitest";
import { unsafeOpaqueId } from "@awp/contracts";
import { renderApprovedLiveProject, type LiveHierarchy } from "../../apps/web/src/approved-live.js";

function emptyHierarchy(): LiveHierarchy {
  const projectId = unsafeOpaqueId("project:authoring");
  return {
    project: {
      id: projectId,
      name: "Authoring",
      repositoryUrl: "https://github.com/platform-modules/awp.git",
      requiredChecks: [],
      status: "active",
    } as never,
    vision: { id: "vision:1", sequence: 1, summary: "Existing canonical vision" },
    goals: [],
    plans: [],
    planRevisions: [],
    tasks: [],
    factoryRuns: [],
    agentRuns: [],
    attempts: [],
    workspaces: [],
    changeSets: [],
    reviews: [],
    verificationEvidence: [],
    reviewFindings: [],
  } as unknown as LiveHierarchy;
}

describe("approved live owner authoring", () => {
  it("keeps Overview information-first while exposing first-use mutation controls on canonical tabs", () => {
    const hierarchy = emptyHierarchy();
    const overview = renderApprovedLiveProject(hierarchy, "overview");
    expect(overview).toContain("New Project");
    expect(overview).not.toContain("Save ProjectVision");
    expect(overview).not.toContain("Create Goal");

    const vision = renderApprovedLiveProject(hierarchy, "vision");
    expect(vision).toContain("Save ProjectVision");
    expect(vision).toContain("Existing canonical vision");
    expect(vision).toContain('action="/internal/projects/project%3Aauthoring/vision"');

    const goals = renderApprovedLiveProject(hierarchy, "goals");
    expect(goals).toContain("Create Goal");
    expect(goals).toContain('name="successCriteria"');

    const plans = renderApprovedLiveProject(hierarchy, "plans");
    expect(plans).toContain("Plan authoring");
    expect(plans).toContain("Create Plan");
    expect(plans).toContain('name="taskTitles"');
    expect(plans).toContain("No draft Plan is waiting to start");
  });
});
