export type MinimalContradictoryFact =
  | { scenarioId: string; fact: string; kind?: string }
  | { fact: string; kind?: string };

export type FilesystemBlockingEvidence = {
  rule: string;
  positiveWitness: {
    description: string;
    fixtureId: string;
    filesystemVersion: string;
    scenarioId?: string;
  };
  negativeWitness: {
    description: string;
    kind: string;
    details?: unknown;
  };
  reproduction: {
    fixtureId: string;
    seed: string;
    surfaceId: string;
    detectorId: string;
  };
  minimalContradictoryFacts: MinimalContradictoryFact[];
};

export function buildBlockingEvidence(
  input: Omit<FilesystemBlockingEvidence, "reproduction"> & {
    seed: string;
    surfaceId: string;
    detectorId: string;
  },
): FilesystemBlockingEvidence {
  const { seed, surfaceId, detectorId, ...rest } = input;
  return {
    ...rest,
    reproduction: {
      fixtureId: rest.positiveWitness.fixtureId,
      seed,
      surfaceId,
      detectorId,
    },
  };
}
