import type { IsolationFixture } from "./types.js";

const checkoutBaseline = {
  scenarioId: "checkout",
  identity: "scenario-checkout-v1",
  result: { status: "ok", total: 42, receiptId: "rcpt-001" },
};

export const metamorphicKnownBad: IsolationFixture = {
  fixtureId: "isolation/metamorphic-known-bad",
  isolationVersion: "1.0",
  scenarios: [
    {
      scenarioId: "order-dependent-result",
      kind: "metamorphic-execution",
      baseline: checkoutBaseline,
      constraints: {
        orderInvariant: true,
        repetitionInvariant: false,
        parallelIndependent: false,
        stableIdentity: true,
      },
      orderings: [
        {
          orderingId: "checkout-first",
          sequence: ["checkout", "seed-writer"],
          observedResults: [
            checkoutBaseline,
            {
              scenarioId: "seed-writer",
              identity: "scenario-seed-writer-v1",
              result: { wrote: true },
            },
          ],
        },
        {
          orderingId: "seed-writer-first",
          sequence: ["seed-writer", "checkout"],
          observedResults: [
            {
              scenarioId: "seed-writer",
              identity: "scenario-seed-writer-v1",
              result: { wrote: true },
            },
            {
              scenarioId: "checkout",
              identity: checkoutBaseline.identity,
              result: { status: "ok", total: 99, receiptId: "rcpt-leaked" },
            },
          ],
        },
      ],
      repetitions: [],
    },
    {
      scenarioId: "repetition-identity-drift",
      kind: "metamorphic-execution",
      baseline: checkoutBaseline,
      constraints: {
        orderInvariant: false,
        repetitionInvariant: true,
        parallelIndependent: false,
        stableIdentity: true,
      },
      orderings: [],
      repetitions: [
        {
          repetitionId: "double-run",
          runCount: 2,
          observedResults: [
            checkoutBaseline,
            {
              scenarioId: "checkout",
              identity: "scenario-checkout-v2-stale",
              result: checkoutBaseline.result,
            },
          ],
        },
      ],
    },
    {
      scenarioId: "parallel-cross-contamination",
      kind: "metamorphic-execution",
      baseline: checkoutBaseline,
      constraints: {
        orderInvariant: false,
        repetitionInvariant: false,
        parallelIndependent: true,
        stableIdentity: true,
      },
      orderings: [],
      repetitions: [],
      parallelRuns: [
        {
          parallelId: "shared-port-workers",
          contexts: [
            {
              contextId: "worker-a",
              scenarioId: "checkout",
              identity: checkoutBaseline.identity,
              result: checkoutBaseline.result,
            },
            {
              contextId: "worker-b",
              scenarioId: "checkout",
              identity: checkoutBaseline.identity,
              result: { status: "ok", total: 42, receiptId: "rcpt-from-worker-a" },
            },
          ],
        },
      ],
    },
    {
      scenarioId: "home-directory-leak",
      kind: "metamorphic-execution",
      baseline: checkoutBaseline,
      constraints: {
        orderInvariant: false,
        repetitionInvariant: false,
        parallelIndependent: false,
        stableIdentity: false,
      },
      orderings: [],
      repetitions: [],
      leakedResources: [
        {
          kind: "real-home-directory",
          leakedFromContext: "prior-run",
          observedInContext: "checkout",
          detail: "live daemon resurrected fixture pointer from real HOME",
        },
        {
          kind: "cache",
          leakedFromContext: "prior-run",
          observedInContext: "checkout",
          detail: "stale journal entry altered checkout receipt",
        },
      ],
    },
  ],
};
