import { confirmedReviewCorpus, type ConfirmedReviewEvalCase } from "./confirmedReviewCorpus";
import { seedCorpus } from "./seedCorpus";
import type { OcrEvalCase } from "../ocrEvalHarness";

export { confirmedReviewCorpus, seedCorpus };
export type { ConfirmedReviewEvalCase };

export const ocrEvalCorpus: OcrEvalCase[] = [...seedCorpus, ...confirmedReviewCorpus];

export function validateConfirmedReviewCorpus(corpus: readonly ConfirmedReviewEvalCase[] = confirmedReviewCorpus) {
  const errors: string[] = [];
  const seen = new Set<string>();
  for (const entry of corpus) {
    if (seen.has(entry.id)) errors.push(`${entry.id}: duplicate id`);
    seen.add(entry.id);
    if (entry.confirmed !== true) errors.push(`${entry.id}: confirmed must be true`);
    if (entry.meta.source !== "review-sample") errors.push(`${entry.id}: meta.source must be review-sample`);
    if (!entry.meta.note?.trim()) errors.push(`${entry.id}: meta.note must describe the review source/reason`);
    if (Object.keys(entry.expect).length === 0) errors.push(`${entry.id}: expect must label at least one field`);
    if (Object.keys(entry.ocr).length === 0) errors.push(`${entry.id}: ocr must contain at least one field`);
  }
  return errors;
}
