import { z } from 'zod'; const DISTRITOS_PT = [ 'Aveiro', 'Beja', 'Braga', 'Bragança', 'Castelo Branco', 'Coimbra', 'Évora', 'Faro', 'Guarda', 'Leiria', 'Lisboa', 'Portalegre', 'Porto', 'Santarém', 'Setúbal', 'Viana do Castelo', 'Vila Real', 'Viseu', 'Açores', 'Madeira', ] as const; export const loginSchema = z.object({ email: z.string().email('Email inválido.'), password: z.string().min(1, 'Palavra-passe obrigatória.'), }); export const registerSchema = z .object({ name: z.string().min(2, 'Nome deve ter pelo menos 2 caracteres.').max(100), email: z.string().email('Email inválido.'), password: z.string() .min(8, 'A palavra-passe deve ter pelo menos 8 caracteres.') .regex(/[A-Z]/, 'Deve conter pelo menos uma letra maiúscula.') .regex(/[0-9]/, 'Deve conter pelo menos um número.'), confirmPassword: z.string(), birthdate: z.string().refine((v) => !isNaN(new Date(v).getTime()), 'Data inválida.'), district: z.enum(DISTRITOS_PT, { error: 'Selecciona um distrito válido.' }), terms: z.literal(true, { error: 'Tens de aceitar os termos.' }), }) .refine((d) => d.password === d.confirmPassword, { message: 'As palavras-passe não coincidem.', path: ['confirmPassword'], }); export const forgotPasswordSchema = z.object({ email: z.string().email('Email inválido.'), }); export const resetPasswordSchema = z .object({ token: z.string().min(1), password: z.string() .min(8, 'A palavra-passe deve ter pelo menos 8 caracteres.') .regex(/[A-Z]/, 'Deve conter pelo menos uma letra maiúscula.') .regex(/[0-9]/, 'Deve conter pelo menos um número.'), confirmPassword: z.string(), }) .refine((d) => d.password === d.confirmPassword, { message: 'As palavras-passe não coincidem.', path: ['confirmPassword'], }); export type LoginInput = z.infer; export type RegisterInput = z.infer; export type ForgotPasswordInput = z.infer; export type ResetPasswordInput = z.infer; export const DISTRITOS = DISTRITOS_PT;