import { z } from 'zod'

const nullableText = (max: number) =>
  z.preprocess(
    (value) => value === '' ? null : value,
    z.string().trim().max(max).nullable().optional(),
  )

const nullableDate = z.preprocess(
  (value) => value === '' ? null : value,
  z.coerce.date().nullable().optional(),
)

export const disciplinaireFormSchema = z.object({
  num_salarie: z.coerce.number().int().positive().nullable().optional(),
  sanction: nullableText(255),
  datedu: nullableDate,
  dateau: nullableDate,
  commentaire: nullableText(5000),
  libelle_date_buttoir: nullableText(255),
  date_buttoir: nullableDate,
  arreter_alerte: z.boolean().nullable().optional(),
  motif: nullableText(255),
})

export const disciplinaireCreateSchema = disciplinaireFormSchema.extend({
  num_salarie: z.coerce.number().int().positive(),
  sanction: z.string().trim().min(1, 'La sanction est obligatoire').max(255),
})

export const disciplinaireUpdateSchema = disciplinaireFormSchema.partial()

export const disciplinaireListQuerySchema = z.object({
  limit: z.coerce.number().int().positive().max(100).default(10),
  offset: z.coerce.number().int().nonnegative().default(0),
})

export type DisciplinaireCreateInput = z.infer<typeof disciplinaireCreateSchema>
export type DisciplinaireUpdateInput = z.infer<typeof disciplinaireUpdateSchema>