{ const btn = e.target.closest('.btn'); if(!btn) return; group.querySelectorAll('.btn').forEach(b=>b.classList.remove('selected')); btn.classList.add('selected'); hidden.value = btn.dataset.value; }); } [ 'valorDesejado','parcelas','carencia','motivo','imovel','veiculo', 'nf','negativado','estadoCivil','qtdFuncionarios', 'maquininha','convenioMedico','convenioOdonto','tipoEmpresa' ].forEach(bindSelectable); const onlyDigits = v => (v||'').replace(/D+/g,''); const maskCPF = v => onlyDigits(v).slice(0,11) .replace(/(d{3})(d)/,'$1.$2') .replace(/(d{3})(d)/,'$1.$2') .replace(/(d{3})(d{1,2})$/,'$1-$2'); const maskCNPJ = v => onlyDigits(v).slice(0,14) .replace(/(d{2})(d)/,'$1.$2') .replace(/(d{3})(d)/,'$1.$2') .replace(/(d{3})(d)/,'$1/$2') .replace(/(d{4})(d{1,2})$/,'$1-$2'); const maskCEP = v => onlyDigits(v).slice(0,8) .replace(/(d{5})(d{1,3})/,'$1-$2'); ['cpf','cnpj','cep'].forEach(id=>{ const el = document.getElementById(id); if(!el) return; el.addEventListener('input', e=>{ if(id==='cpf') e.target.value = maskCPF(e.target.value); if(id==='cnpj') e.target.value = maskCNPJ(e.target.value); if(id==='cep') e.target.value = maskCEP(e.target.value); }); }); async function buscaCEP(cep){ const c = onlyDigits(cep); if(c.length !== 8) return null; try{ const r = await fetch(`https://viacep.com.br/ws/${c}/json/`); const j = await r.json(); return j.erro ? null : j; }catch{ return null; } } const cepEl = document.getElementById('cep'); if(cepEl){ cepEl.addEventListener('blur', async ()=>{ const j = await buscaCEP(cepEl.value); if(!j) return; endereco.value = j.logradouro || ''; bairro.value = j.bairro || ''; cidade.value = j.localidade || ''; estado.value = j.uf || ''; }); } function showError(name, show){ const el = document.querySelector(`[data-error="${name}"]`); if(el) el.style.display = show ? 'block' : 'none'; } function validateCurrent(){ const current = steps[idx]; let valid = true; current.querySelectorAll('input[required], select[required]').forEach(inp=>{ const ok = inp.value && inp.value.trim(); showError(inp.name, !ok); if(!ok) valid = false; }); current.querySelectorAll('input[type="hidden"][required]').forEach(inp=>{ const ok = inp.value && inp.value.trim(); showError(inp.name, !ok); if(!ok) valid = false; }); return valid; } const contEl = document.getElementById('Contabilidade'); if(contEl){ contEl.addEventListener('input', ()=>{ let v = contEl.value.replace(/D+/g,''); if(!v){ contEl.value='R$ 0,00'; return; } v = (parseInt(v,10)/100).toFixed(2).replace('.',','); contEl.value = 'R$ ' + v.replace(/B(?=(d{3})+(?!d))/g,'.'); }); } async function uploadFileFirebase(input){ const file = input.files[0]; if(!file) return ''; const ref = firebase.storage().ref().child('uploads/' + Date.now() + '_' + file.name); await ref.put(file); return await ref.getDownloadURL(); } const form = document.getElementById('formCredito'); form.addEventListener('submit', async e=>{ e.preventDefault(); if(!validateCurrent()) return; const fd = new FormData(form); const data = Object.fromEntries(fd.entries()); data.docFoto = await uploadFileFirebase(document.getElementById('docFoto')); data.selfie = await uploadFileFirebase(document.getElementById('selfie')); try{ const res = await fetch(STEIN_URL,{ method:'POST', headers:{'Content-Type':'application/json'}, body: JSON.stringify([data]) }); if(!res.ok) throw new Error(res.status); alert('�� Dados enviados com sucesso!'); form.reset(); document.querySelectorAll('.btn.selected').forEach(b=>b.classList.remove('selected')); show(0); }catch{ alert('❌ Erro ao enviar os dados.'); } });});