import { z } from "zod";
export const sourcesSchema = z
.array(
z
.object({
id: z
.string()
.regex(/^[a-z0-9-]+$/)
.max(60),
title: z.string().min(1).max(120),
kind: z.string().max(60),
date: z.string().max(30),
text: z.string().min(1).max(12000),
clarification: z
.object({
sourceId: z
.string()
.regex(/^[a-z0-9-]+$/)
.max(60),
line: z.number().int().positive(),
quote: z.string().min(1).max(12000),
reason: z.string().trim().min(1).max(500),
confirmedBy: z.string().trim().min(1).max(120),
})
.strict()
.optional(),
})
.strict()
)
.min(1)
.max(8)
.refine(
(sources) => new Set(sources.map((s) => s.id)).size === sources.length,
"Source IDs must be unique"
);
export const baseSchema = z.object({
sources: sourcesSchema,
syntheticOnly: z.literal(true),
});
export const coverageReviewSchema = z.record(z.string().max(250), z.object({
fingerprint: z.string().length(64),
reason: z.string().trim().min(10).max(500),
confirmedBy: z.string().trim().min(1).max(120),
}).strict()).refine((value) => Object.keys(value).length <= 500, "Too many coverage resolutions").default({});