import type { RelationVerdict } from "../../graph.js";

export type MinimalContradictoryFact =
  | { nodeId: string; normalizedValue: unknown }
  | { fact: string; kind?: string };

export type ConsistencyBlockingEvidence = {
  rule: string;
  positiveWitness: {
    description: string;
    fixtureId: string;
    relationId?: string;
  };
  negativeWitness: {
    description: string;
    kind: string;
    verdict?: RelationVerdict;
    details?: unknown;
  };
  reproduction: {
    fixtureId: string;
    seed: string;
    surfaceId: string;
    detectorId: string;
  };
  minimalContradictoryFacts: MinimalContradictoryFact[];
  noWinner?: boolean;
  fixPacket?: {
    statesContradiction: boolean;
    guessesWinner: boolean;
  };
};

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

export function factsFromVerdict(verdict: RelationVerdict): MinimalContradictoryFact[] {
  if (verdict.status !== "contradiction") {
    return [];
  }
  return verdict.facts.map((fact) => ({
    nodeId: fact.nodeId,
    normalizedValue: fact.normalizedValue,
  }));
}
