import { z } from 'zod'; /** * `dia_vencimento_mensalidade` fica como `z.number()` puro — a conversão * string→number do input acontece no `register(...)` do react-hook-form * (`setValueAs`), não no schema (ver `lib/validators/planos.ts`). */ const diaVencimento = z.number().int().min(1).max(28).optional(); /** Espelha `CreateTenantDto` (`src/modules/tenants/dto/create-tenant.dto.ts`). */ export const createTenantSchema = z.object({ razao_social: z.string().min(2, 'Informe pelo menos 2 caracteres'), nome_fantasia: z.string().optional(), documento: z.string().optional(), email_contato: z.email('E-mail inválido'), telefone: z.string().optional(), plano_id: z.string().min(1, 'Selecione um plano'), dia_vencimento_mensalidade: diaVencimento, admin_nome: z.string().min(2, 'Informe o nome do responsável'), admin_email: z.email('E-mail inválido'), // Vazio = backend gera senha provisória automaticamente. admin_senha: z.string().refine((v) => v.length === 0 || v.length >= 8, { message: 'A senha deve ter pelo menos 8 caracteres (ou deixe em branco para gerar uma)', }), }); export type CreateTenantFormValues = z.infer; /** Espelha `UpdateTenantDto` — mesmos campos cadastrais, sem `admin`. */ export const updateTenantSchema = z.object({ razao_social: z.string().min(2, 'Informe pelo menos 2 caracteres'), nome_fantasia: z.string().optional(), documento: z.string().optional(), email_contato: z.email('E-mail inválido'), telefone: z.string().optional(), plano_id: z.string().min(1, 'Selecione um plano'), dia_vencimento_mensalidade: diaVencimento, }); export type UpdateTenantFormValues = z.infer;