import { effectiveDefault, isUnique, supportsLimits, trimmedOptions, type BuilderField, type BuilderForm, } from '@/lib/schemaBuilderModel' export interface PayloadField { key: string label: string type: string required: boolean unique: boolean default: string | number | boolean | null min: number | string | null max: number | string | null options: string[] } export interface ContentTypePayload { key: string name: string fields: PayloadField[] } function limit(field: BuilderField, text: string) { if (!supportsLimits(field.type) || text.trim() === '') { return null } return field.type === 'date' ? text : Number(text) } function defaultFor(field: BuilderField) { if (field.type === 'boolean') { return field.defaultOn ? true : null } const given = effectiveDefault(field) if (given === '') { return null } return field.type === 'number' ? Number(given) : given } export function payloadField(field: BuilderField): PayloadField { return { key: field.key, label: field.label.trim(), type: field.type, required: field.required, unique: isUnique(field), default: defaultFor(field), min: limit(field, field.min), max: limit(field, field.max), options: field.type === 'select' ? trimmedOptions(field) : [], } } export function buildPayload(form: BuilderForm): ContentTypePayload { return { key: form.key, name: form.name.trim(), fields: form.fields.map(payloadField), } }