import { z } from 'zod';
/** HTML type=number binds number; API/store may return number — normalize to string for validation. */
function retentionMinutesInput(val: unknown): string {
if (val === undefined || val === null) return '';
if (typeof val === 'number') {
if (!Number.isFinite(val)) return '';
return String(Math.trunc(val));
}
return String(val);
}
const revisionRetentionMinutes = z.preprocess(
retentionMinutesInput,
z.string().refine(
(v) => {
const s = v.trim();
if (s === '') return true;
const ttl = Number(s);
return /^\d+$/.test(s) && Number.isInteger(ttl) && ttl >= 15 && ttl <= 43200;
},
{ message: 'TTL ревизий должен быть целым числом от 15 до 43200 минут' }
)
);
export const revisionSettingsSchema = z.object({
revision_retention_minutes: revisionRetentionMinutes
});
export type RevisionSettingsForm = z.infer;
export const emptyRevisionSettingsForm = (): RevisionSettingsForm => ({
revision_retention_minutes: ''
});