import { z } from 'zod';

const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
const ACCEPTED_IMAGE_TYPES = ["image/jpeg", "image/jpg", "image/png", "application/pdf"];

export const registrationSchema = z.object({
  // Etapa 1
  forma_trabalho: z.enum(['proprio', 'motorista'], { required_error: "Selecione a forma de trabalho" }),
  tipo_veiculo: z.string().optional(),
  tipos_aluguel: z.array(z.string()).optional(),

  // Dados Pessoais
  nome_completo: z.string().min(3, "Nome deve ter no mínimo 3 caracteres").regex(/^[A-Za-zÀ-ú\s()]+$/, "Apenas letras e parênteses são permitidos"),
  data_nascimento: z.string().min(1, "Data de nascimento é obrigatória"),
  cpf: z.string().min(11, "CPF inválido").max(14, "CPF inválido"),
  telefone: z.string().min(10, "Telefone inválido"),
  cnh: z.string().min(1, "CNH é obrigatória"),
  validade_cnh: z.string().min(1, "Validade da CNH é obrigatória"),
  placa_veiculo: z.string().optional(),
  observacao: z.string().optional(),
  
  // Novos campos do HTML
  coordenador: z.string().optional(),
  modalidade: z.string().optional(),
  email: z.string().email("Email inválido"),
  base: z.string().optional(),
  is_internal: z.boolean().optional(),

  // Etapa 3
  cnpj: z.string().optional(),
  cep: z.string().min(8, "CEP inválido"),
  endereco: z.string().min(1, "Endereço obrigatório"),
  cidade: z.string().min(1, "Cidade obrigatória"),
  bairro: z.string().optional(),
  
  iddrivers: z.any().optional(),
  
  // Arquivos (validacao manual no step)
  cnh_frente: z.any().optional(),
  cnh_verso: z.any().optional(),
  comprovante_residencia: z.any().optional(),
  crlv: z.any().optional(),
  antt: z.any().optional(),
  direcao_defensiva: z.any().optional(),
  exame_toxico: z.any().optional(),
  cartao_cnpj: z.any().optional(),
  owner_cnh_file: z.any().optional(),

  // Checkbox
  is_third_party_vehicle: z.boolean().optional(),
  terms: z.literal(true, { errorMap: () => ({ message: "Você deve aceitar os termos" }) }),
}).superRefine((data, ctx) => {
  // Validação restrita para cadastros internos
  if (data.is_internal) {
    if (!data.coordenador || data.coordenador.trim() === '') {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        message: "Nome do Coordenador é obrigatório",
        path: ['coordenador'],
      });
    }
    if (!data.modalidade || data.modalidade.trim() === '') {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        message: "Modalidade é obrigatória",
        path: ['modalidade'],
      });
    }
    if (!data.base || data.base.trim() === '') {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        message: "Base de Operação é obrigatória",
        path: ['base'],
      });
    }
  }

  if (data.forma_trabalho === 'proprio') {
    if (!data.tipo_veiculo) {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        message: "Tipo de veículo é obrigatório para veículo próprio",
        path: ['tipo_veiculo'],
      });
    }
    if (!data.placa_veiculo) {
      ctx.addIssue({
        code: z.ZodIssueCode.custom,
        message: "Placa do veículo é obrigatória",
        path: ['placa_veiculo'],
      });
    }
  }

  // CNPJ é obrigatório em ambos os casos conforme o formulário final do usuário
  if (!data.cnpj) {
    ctx.addIssue({
      code: z.ZodIssueCode.custom,
      message: "CNPJ é obrigatório (MEI)",
      path: ['cnpj'],
    });
  }
});
