import { emailField } from "@/schema/common.schema";
import * as z from "zod";

export const userFormSchema = z.object({
  firstName: z
    .string()
    .min(2, { message: "First name must be at least 2 characters" })
    .max(50, { message: "First name must be less than 50 characters" }),
  lastName: z
    .string()
    .min(2, { message: "Last name must be at least 2 characters" })
    .max(50, { message: "Last name must be less than 50 characters" }),
  email: emailField(),
  phone: z.coerce
    .number()
    .optional()
    .refine((val) => val === undefined || /^\d{10}$/.test(val.toString()), {
      message: "Phone number must be exactly 10 digits",
    }),
  role: z.string().min(1, "Role is required"),
  team: z.string().optional(),
  reportingTo: z.string().min(1, "Reporting To is required"),
  memberType: z.enum(["internal", "external"], {
    required_error: "Please select member type",
  }),
  joinDate: z.union([z.string(), z.date()]).optional(),
});

export const userViewFormSchema = z.object({
  firstName: z
    .string()
    .min(2, { message: "First name must be at least 2 characters" })
    .max(50, { message: "First name must be less than 50 characters" }),
  lastName: z
    .string()
    .min(2, { message: "Last name must be at least 2 characters" })
    .max(50, { message: "Last name must be less than 50 characters" }),
  email: emailField(),
  phone: z.coerce
    .string()
    .optional()
    .refine((val) => val === undefined || /^\d{10}$/.test(val), {
      message: "Phone number must be exactly 10 digits",
    }),
  memberType: z.enum(["internal", "external"], {
    required_error: "Please select member type",
  }),
  status: z.enum(["active", "inActive", "pending"], {
    required_error: "Please select status",
  }),
});
