import { z } from "zod";

export const zValidate = (name: string | null) => {
  return {
    required_error: `${name ? name : "این فیلد"} الزامی است!`,
    invalid_type_error: "لطفا فیلد را به درستی پر کنید!",
  };
};

export const zValidateNumber = (name: string | null) => {
  return z.coerce
    .number(zValidate(name || null))
    .min(1, `${name || "فیلد"} نمیتواند خالی باشد!`);
};

export const zValidateNumberOptional = (name: string | null) => {
  return z.coerce.number(zValidate(name || null)).optional();
};

export const zValidateString = (name: string | null) => {
  return z.coerce
    .string(zValidate(name || null))
    .min(1, `${name || "فیلد"} نمیتواند خالی باشد!`);
};

export const zValidateStringOptional = (name: string | null) => {
  return z.coerce.string(zValidate(name || null)).optional();
};

export const zValidateMobile = (name: string | null = "شماره موبایل") => {
  return z.coerce
    .string(zValidate(name))
    .min(1, `${name || "فیلد"} نمیتواند خالی باشد!`)
    .regex(/^09\d{9}$/, `موبایل باید با 09 شروع شود و 11 رقم باشد!`);
};

export const zValidateAutoComplete = (name: string | null) => {
  return z
    .array(z.union([z.string(), z.number()]))
    .min(1, { message: `لطفاً ${name} را انتخاب کنید.` });
};

export const zValidateAutoCompleteOptional = () => {
  return z.array(z.union([z.string(), z.number()])).optional();
};
