import { z } from "zod";

import { paginationQuerySchema } from "@/validators/pagination";

const nullableText150 = z.string().trim().min(1).max(150).nullable().optional();
const nullableText255 = z.string().trim().min(1).max(255).nullable().optional();
const nullableLongText = z.string().trim().min(1).max(5000).nullable().optional();
const nullableInt = z.coerce.number().int().nullable().optional();
const nullableDate = z.union([z.coerce.date().nullable(), z.string().nullable()]).optional();

export const avenantListQuerySchema = paginationQuerySchema;

export const avenantFormSchema = z.object({
  id_avenant: nullableInt,
  id_contrat: nullableInt,
  avenant_type: nullableText150,
  avenant_datedu: nullableDate,
  avenant_dateau: nullableDate,
  commentaire: nullableLongText,
  idcontrat_cap22: nullableText255,
  date_creation: nullableDate,
});

export const avenantCreateSchema = avenantFormSchema.extend({
  id_contrat: z.coerce.number().int(),
});

export const avenantUpdateSchema = avenantFormSchema
  .omit({
    id_avenant: true,
    id_contrat: true,
    date_creation: true,
  })
  .partial()
  .refine(
    (data) => Object.keys(data).length > 0,
    { message: "At least one field must be provided" }
  );

export type AvenantCreateInput = z.infer<typeof avenantCreateSchema>;
export type AvenantUpdateInput = z.infer<typeof avenantUpdateSchema>;


