import { INTERNAL_EMAIL_DOMAIN } from '@/conf' import { isValidCPF } from '@brazilian-utils/brazilian-utils' import { adjectives, colors, NumberDictionary, uniqueNamesGenerator } from 'unique-names-generator' import { z } from 'zod' export const isName = (name: string) => name && name.includes(' ') function randomEmail() { const numberDict = NumberDictionary.generate({ min: 100, max: 999 }) const randomName: string = uniqueNamesGenerator({ dictionaries: [adjectives, colors, numberDict], length: 3, separator: '-' }) return `${randomName}@${INTERNAL_EMAIL_DOMAIN}` } export const formSchema = z .object({ name: z .string() .trim() .nonempty('Digite um nome') .refine(isName, { message: 'Nome inválido' }), email: z.string().trim().toLowerCase().optional(), cpf: z .string('CPF obrigatório') .refine(isValidCPF, { message: 'CPF inválido' }), given_email: z.coerce.boolean() }) .refine( ({ given_email, email }) => { if (given_email) { return true } return email && z.email().safeParse(email).success }, { message: 'Email inválido', path: ['email'] } ) .transform((data) => { if (data.given_email) { return { ...data, email: randomEmail() } } return data }) export type Schema = z.infer