import { z } from "zod";

export const customerSchema = z
  .object({
    type: z.enum(["INDIVIDUAL", "COMPANY"], {
      required_error: "Selecione o tipo de pessoa.",
    }),
    name: z
      .string()
      .min(3, "O nome / razão social deve ter pelo menos 3 caracteres.")
      .max(120, "Nome muito longo."),
    document: z
      .string()
      .min(11, "O documento informado é muito curto.")
      .max(18, "O documento informado é muito longo."),
    email: z
      .string()
      .email("Insira um e-mail válido.")
      .or(z.literal(""))
      .optional(),
    phone: z.string().optional(),
    mobile: z.string().optional(),
    contactName: z.string().optional(),
    creditLimit: z
      .number({ invalid_type_error: "Limite de crédito inválido." })
      .min(0, "O limite deve ser maior ou igual a zero."),
    status: z.enum(["ACTIVE", "INACTIVE", "DELINQUENT"]),
    notes: z.string().optional(),
    zipCode: z.string().optional(),
    street: z.string().optional(),
    number: z.string().optional(),
    complement: z.string().optional(),
    district: z.string().optional(),
    city: z.string().optional(),
    state: z.string().optional(),
  })
  .refine(
    (data) => {
      const cleanDoc = data.document.replace(/\D/g, "");
      if (data.type === "INDIVIDUAL") {
        return cleanDoc.length === 11;
      }
      return cleanDoc.length === 14;
    },
    {
      message: "CPF deve ter 11 dígitos ou CNPJ deve ter 14 dígitos.",
      path: ["document"],
    }
  );

export type CustomerFormValues = z.infer<typeof customerSchema>;
