import { z } from "zod"

import { passwordValidator } from "@/utils/passwordValidator"
import { phoneValidator } from "@/utils/phoneValidator"

const countryRequiredMsg = "Country is required"
export const signUpSchema = z.object({
  firstName: z.string().max(250).trim().min(1, {
    message: "First name is required",
  }),
  lastName: z.string().max(250).trim().min(1, {
    message: "Last name is required",
  }),
  email: z.string().max(250).email(),
  phoneNumber: phoneValidator(
    "Phone is required",
    "Please enter a valid phone number"
  ),
  dateOfBirth: z.string().min(1, {
    message: "Date of birth is required",
  }),
  address: z.object({
    countryCode: z
      .string({
        required_error: countryRequiredMsg,
        invalid_type_error: countryRequiredMsg,
      })
      .min(1, countryRequiredMsg),
    zipCode: z.string().min(1),
  }),
  password: passwordValidator("Password is required"),
  termsAccepted: z.boolean().refine((value) => value === true, {
    message: "You must accept the terms and conditions",
  }),
})

export type SignUpSchema = z.infer<typeof signUpSchema>
