import { z } from "zod";
import { nullableText150, nullableText255, nullableText5000 } from "./employes";

export const contratListQuerySchema = z.object({
  limit: z.coerce.number().int().min(1).max(100).optional().default(20),
  offset: z.coerce.number().int().min(0).optional().default(0),
});

const nullableStr150 = () => nullableText150;
const nullableStr255 = () => nullableText255;
const nullableLong = () => nullableText5000;
const nullableInt = () => z.coerce.number().int().nullable().optional();
const nullableNum = () => z.coerce.number().nullable().optional();
const nullableBool = () => z.boolean().nullable().optional();
const nullableDate = () => z.union([z.coerce.date().nullable(), z.string().nullable()]).optional();

export const contratFormSchema = z.object({
  id_contrat: nullableInt(),
  id_salarie: nullableInt(),
  TCS: nullableStr150(),
  MotifContrat: nullableStr255(),
  DAE: nullableDate(),
  FPE: nullableDate(),
  DSI: nullableStr150(),
  DSP: nullableDate(),
  DSR: nullableDate(),
  POS: nullableStr150(),
  FIL: nullableInt(),
  QUA: nullableStr150(),
  CAT: nullableStr150(),
  NIV: nullableStr150(),
  ECH: nullableStr150(),
  COE: nullableStr150(),
  TXH: nullableNum(),
  ETB: nullableStr150(),
  SEC: nullableStr150(),
  CAN_TypCont: nullableInt(),
  CAN_ConvInser: nullableInt(),
  CAN_RuptBudg: nullableInt(),
  CAN_Metiers: nullableStr150(),
  MSR: nullableStr150(),
  DME: nullableDate(),
  MEN: z.coerce.number().nullable().optional(),
  NAG: nullableStr150(),
  DDA: nullableDate(),
  DFA: nullableDate(),
  NHH: nullableStr150(),
  DUE: nullableStr150(),
  SMR: z.string().nullable().optional(),
  REMBMENS: nullableNum(),
  NBHRHEB: nullableInt(),
  SMBE: z.coerce.number().nullable().optional(),
  Secteur: nullableStr150(),
  DateImprimFS: nullableDate(),
  DateRemiseFE: nullableDate(),
  DateDdePref: nullableDate(),
  DateDdeVM: nullableDate(),
  D1C: nullableDate(),
  IDSalarie_Cap22: nullableStr150(),
  IdContrat_Cap22: nullableStr150(),
  date_creation: nullableDate(),
});

export const contratCreateSchema = contratFormSchema.extend({
  id_salarie: z.coerce.number().int(),
});

export const contratUpdateSchema = contratFormSchema.partial();

export type ContratCreateInput = z.infer<typeof contratCreateSchema>;
export type ContratUpdateInput = z.infer<typeof contratUpdateSchema>;
