import { z } from "zod"; import { customerDatePresetValues, customerGenderValues, sessionDatePresetValues, } from "@/lib/constants"; const phoneRegex = /^[0-9+\s()\-]+$/; export const customerSchema = z.object({ firstName: z .string() .trim() .min(2, "الاسم الأول لازم يكون حرفين على الأقل.") .max(60, "الاسم الأول طويل زيادة عن اللزوم."), middleName: z .string() .trim() .max(60, "الاسم الأوسط طويل زيادة عن اللزوم.") .optional() .or(z.literal("")), lastName: z .string() .trim() .min(2, "اسم العيلة لازم يكون حرفين على الأقل.") .max(60, "اسم العيلة طويل زيادة عن اللزوم."), gender: z.enum(customerGenderValues, { error: "اختار النوع.", }), phone: z .string() .trim() .min(7, "رقم الموبايل قصير جدًا.") .max(30, "رقم الموبايل طويل زيادة عن اللزوم.") .regex(phoneRegex, "رقم الموبايل لازم يحتوي على أرقام ورموز صحيحة بس."), }); export const customerListQuerySchema = z.object({ search: z.string().trim().max(100).optional().catch(undefined), gender: z.enum(customerGenderValues).optional().catch(undefined), createdPreset: z .enum(customerDatePresetValues) .optional() .catch(undefined) .default("all"), page: z.coerce.number().int().min(1).optional().catch(1).default(1), }); export const customerDetailsQuerySchema = z.object({ tab: z .enum(["info", "cases", "sessions", "archive"]) .optional() .catch(undefined), caseSearch: z.string().trim().max(100).optional().catch(undefined), caseType: z .enum(["CIVIL", "CRIMINAL", "PERSONAL_STATUS"]) .optional() .catch(undefined), archiveSearch: z.string().trim().max(100).optional().catch(undefined), archiveFileId: z.string().trim().optional().catch(undefined), sessionPreset: z .enum(sessionDatePresetValues) .optional() .catch(undefined) .default("all"), sessionId: z.string().trim().optional().catch(undefined), }); export type CustomerInput = z.infer; export type CustomerListQueryInput = z.infer; export type CustomerDetailsQueryInput = z.infer;