import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { maskCNPJ, isValidCNPJ, maskCPF, isValidCPF, maskCEP } from '../utils/validators' // Máscara local para telefone const maskPhone = (v: string) => v.replace(/\D/g, '').replace(/^(\d{2})(\d)/g, '($1) $2').replace(/(\d)(\d{4})$/, '$1-$2').substring(0, 15) export function CompleteRegistrationPage() { const navigate = useNavigate() const [step, setStep] = useState(1) // 1: Pessoal, 2: Endereço, 3: Empresa const [loading, setLoading] = useState(false) // Erros const [cpfError, setCpfError] = useState('') const [cnpjError, setCnpjError] = useState('') const [cepError, setCepError] = useState('') const [cepLoading, setCepLoading] = useState(false) // Dados Pessoais const [personalData, setPersonalData] = useState({ nomeCivil: '', nomeSocial: '', cpf: '', }) // Endereço const [addressData, setAddressData] = useState({ cep: '', logradouro: '', numero: '', complemento: '', bairro: '', cidade: '', estado: '', }) // Empresa const [companyData, setCompanyData] = useState({ cnpj: '', razaoSocial: '', nomeFantasia: '', telefone: '', email: '', }) const handleBlurCPF = () => { if (personalData.cpf && !isValidCPF(personalData.cpf)) { setCpfError('CPF inválido') } else { setCpfError('') } } const handleBlurCNPJ = () => { if (companyData.cnpj && !isValidCNPJ(companyData.cnpj)) { setCnpjError('CNPJ inválido') } else { setCnpjError('') } } const handleBlurCEP = async () => { const rawCep = addressData.cep.replace(/\D/g, '') if (rawCep.length !== 8) { // Se estiver vazio não mostra erro, só se tiver incompleto if (rawCep.length > 0) setCepError('CEP incompleto') return } setCepLoading(true) setCepError('') try { const response = await fetch(`https://viacep.com.br/ws/${rawCep}/json/`) const data = await response.json() if (data.erro) { setCepError('CEP não encontrado') return } setAddressData(prev => ({ ...prev, logradouro: data.logradouro, bairro: data.bairro, cidade: data.localidade, estado: data.uf, // Mantém número e complemento se já digitados? Geralmente CEP preenche logs... // Se complemento vier da API (raro em viacep genérico), preenche. })) } catch (err) { setCepError('Erro ao buscar CEP') } finally { setCepLoading(false) } } const handleNext = (e: React.FormEvent) => { e.preventDefault() // Validar passo atual antes de avançar if (step === 1) { if (cpfError || !personalData.nomeCivil || !isValidCPF(personalData.cpf)) { if (!isValidCPF(personalData.cpf)) setCpfError('CPF inválido') return } } if (step === 2) { if (cepError || !addressData.logradouro || !addressData.numero || !addressData.bairro || !addressData.cidade || !addressData.estado) { return } } setStep(step + 1) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (cnpjError || !isValidCNPJ(companyData.cnpj)) { if (!isValidCNPJ(companyData.cnpj)) setCnpjError('CNPJ inválido') return } setLoading(true) try { // Simular envio console.log('Dados completos:', { personalData, addressData, companyData }) await new Promise(resolve => setTimeout(resolve, 1500)) alert('Cadastro completado com sucesso! Aguarde a aprovação.') navigate('/login') } catch (error) { alert('Erro ao salvar dados.') } finally { setLoading(false) } } return (
Passo {step} de 3