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 (

Completar Registro

Passo {step} de 3

{/* Progress Bar */}
= 1 ? 'bg-blue-600' : 'bg-gray-200'}`}>
= 2 ? 'bg-blue-600' : 'bg-gray-200'}`}>
= 3 ? 'bg-blue-600' : 'bg-gray-200'}`}>
{/* Step 1: Dados Pessoais */} {step === 1 && (

Dados Pessoais

setPersonalData({ ...personalData, nomeCivil: e.target.value })} />
{ setPersonalData({ ...personalData, cpf: maskCPF(e.target.value) }) setCpfError('') }} onBlur={handleBlurCPF} placeholder="000.000.000-00" maxLength={14} /> {cpfError &&

{cpfError}

}
)} {/* Step 2: Endereço */} {step === 2 && (

Endereço

{ setAddressData({ ...addressData, cep: maskCEP(e.target.value) }) setCepError('') }} onBlur={handleBlurCEP} placeholder="00000-000" maxLength={9} /> {cepLoading && (
)}
{cepError &&

{cepError}

}
setAddressData({ ...addressData, logradouro: e.target.value })} />
setAddressData({ ...addressData, numero: e.target.value })} />
setAddressData({ ...addressData, complemento: e.target.value })} />
setAddressData({ ...addressData, bairro: e.target.value })} />
setAddressData({ ...addressData, cidade: e.target.value })} /> setAddressData({ ...addressData, estado: e.target.value })} maxLength={2} />
)} {/* Step 3: Empresa */} {step === 3 && (

Dados da Empresa

{ setCompanyData({ ...companyData, cnpj: maskCNPJ(e.target.value) }) setCnpjError('') }} onBlur={handleBlurCNPJ} placeholder="00.000.000/0000-00" maxLength={18} /> {cnpjError &&

{cnpjError}

}
setCompanyData({ ...companyData, razaoSocial: e.target.value })} />
setCompanyData({ ...companyData, nomeFantasia: e.target.value })} />
setCompanyData({ ...companyData, telefone: maskPhone(e.target.value) })} placeholder="(00) 00000-0000" maxLength={15} />
setCompanyData({ ...companyData, email: e.target.value })} placeholder="contato@empresa.com" />
)}
{step > 1 ? ( ) :
}
{/* Botão de Skip para teste (remover em prod) */}
) }