import { describe, expect, test } from "bun:test";
import type { RequestStoryV1 } from "@overdeck/report-contract";
import { enrichRequestStoryWithFactoryLinks } from "./request-story";

function story(links: RequestStoryV1["links"] = []): RequestStoryV1 {
  return {
    schemaVersion: 1,
    requestId: "request-1",
    title: "Observe delivery",
    project: "overdeck",
    state: "in_flight",
    priority: "HIGH",
    askedAt: "2026-08-18T08:00:00.000Z",
    updatedAt: "2026-08-18T08:00:00.000Z",
    originalRequest: { body: "Observe delivery", format: "plain_text", source: "owner" },
    events: [],
    links,
    attachments: [],
    coverage: [{ fact: "work_evidence", status: "unavailable", sourceId: "request-evidence-links", reason: "No exact work evidence." }],
  };
}

const FACTORY_LINKS = {
  available: true,
  links: [{ requestId: "request-1", adwId: "run-1", linkedAt: "2026-08-18T09:00:00.000Z", startedAt: null, status: "running", repo: "overdeck" }],
};

describe("enrichRequestStoryWithFactoryLinks", () => {
  test("adds the canonical run once and marks exact work evidence complete", () => {
    const enriched = enrichRequestStoryWithFactoryLinks(story(), FACTORY_LINKS);
    enrichRequestStoryWithFactoryLinks(enriched, FACTORY_LINKS);
    expect(enriched.links.filter((link) => link.kind === "factory_run")).toHaveLength(1);
    expect(enriched.events.filter((event) => event.kind === "run_linked")).toHaveLength(1);
    expect(enriched.coverage.find((item) => item.fact === "work_evidence")).toEqual({
      fact: "work_evidence", status: "complete", sourceId: "request-evidence-links",
    });
  });

  test("does not mistake a delivery-only link for work evidence", () => {
    const deliveryOnly = story([{
      kind: "commit", targetSource: "git", targetId: "a".repeat(40), occurredAt: "2026-08-18T09:00:00.000Z",
      sourceId: "delivery-machinery", sourceEventId: "land-result", metadata: {},
    }]);
    const enriched = enrichRequestStoryWithFactoryLinks(deliveryOnly, { available: false, links: [] });
    expect(enriched.coverage.find((item) => item.fact === "work_evidence")).toEqual({
      fact: "work_evidence", status: "unavailable", sourceId: "factory-trace", reason: "Exact work-run linkage could not be read.",
    });
  });
});
