<script>
(function(){
const ENDPOINT = "https://script.google.com/macros/s/AKfycbzLVizpsF6sWx1E1Aud0OoYlEYqJqf3ntf40M6J5XKI0mi46lARdiO4p2pdCbNL4VAp/exec"; // cole aqui a URL do Apps Script (acabada em /exec)
const form = document.getElementById('caffune-form');
const feedback = document.getElementById('caffune-feedback');
const phone = document.getElementById('cf_phone');
const nameField = document.getElementById('cf_name');
const emailField = document.getElementById('cf_email');
const consentField = document.getElementById('cf_consent');
// máscara suave de telefone BR (opcional)
function maskPhone(v){
v = v.replace(/\D/g, '').slice(0,11);
if (v.length > 10) return v.replace(/^(\d{2})(\d{5})(\d{4}).*/, '($1) $2-$3');
if (v.length > 6) return v.replace(/^(\d{2})(\d{4})(\d{0,4}).*/, '($1) $2-$3');
if (v.length > 2) return v.replace(/^(\d{2})(\d{0,5}).*/, '($1) $2');
if (v.length > 0) return v.replace(/^(\d{0,2}).*/, '($1');
return v;
}
phone && phone.addEventListener('input', function(e){ e.target.value = maskPhone(e.target.value); });
if (!form) { console.warn('Caffuné form não encontrado'); return; }
form.addEventListener('submit', async function(e){
e.preventDefault();
feedback.textContent = '';
const name = (nameField && nameField.value || '').trim();
const email = (emailField && emailField.value || '').trim().toLowerCase();
const phoneVal = (phone && phone.value || '').trim();
const consent = (consentField && consentField.checked);
if (!name || !email) {
feedback.style.color = '#b91c1c';
feedback.textContent = 'Por favor preencha nome e e-mail.';
return;
}
if (!consent) {
feedback.style.color = '#b91c1c';
feedback.textContent = 'Por favor aceite a política de privacidade.';
return;
}
const payload = {
name: name,
email: email,
phone: phoneVal,
consent: consent,
meta: {
referrer: document.referrer || '',
page: location.pathname + location.search,
userAgent: navigator.userAgent,
tz: Intl.DateTimeFormat().resolvedOptions().timeZone
}
};
const btn = form.querySelector('button[type="submit"]');
const originalText = btn ? btn.innerHTML : 'Enviando...';
if (btn) { btn.disabled = true; btn.innerHTML = 'Enviando…'; }
try {
const res = await fetch(ENDPOINT, {
method: 'POST',
headers: { 'Content-Type': 'text/plain;charset=utf-8' }, // evita preflight
body: JSON.stringify(payload)
});
let ok = res.ok;
let data = null;
try { data = await res.json(); } catch(e){ /* ignore */ }
if (ok && data && data.status === 'sucesso') {
feedback.style.color = '#065f46';
feedback.innerHTML = '<strong>Pronto! Você está na lista </strong> <div style="color:#6b7280">Enviaremos seu cupom de 10% por e-mail 2 horas antes da inauguração.</div>';
form.reset();
} else if (ok) {
// caso o script retorne ok sem body
feedback.style.color = '#065f46';
feedback.innerHTML = '<strong>Pronto! Você está na lista </strong> <div style="color:#6b7280">Enviaremos seu cupom de 10% por e-mail 2 horas antes da inauguração.</div>';
form.reset();
} else {
throw new Error('Resposta não OK');
}
} catch(err) {
console.error('Erro envio lead:', err);
// fallback: grava local para tentar reenviar futuramente
try {
const queue = JSON.parse(localStorage.getItem('caffune_lead_queue') || '[]');
queue.push(payload);
localStorage.setItem('caffune_lead_queue', JSON.stringify(queue));
} catch(e){}
feedback.style.color = '#b91c1c';
feedback.textContent = 'Não foi possível enviar agora. Tente novamente mais tarde.';
} finally {
if (btn) { btn.disabled = false; btn.innerHTML = originalText; }
}
});
// tenta reenviar fila (se tiver) quando alguém carrega a página
(async function retryQueue(){
try {
const queue = JSON.parse(localStorage.getItem('caffune_lead_queue') || '[]');
if (!queue.length) return;
const remain = [];
for (const item of queue) {
try {
const r = await fetch(ENDPOINT, { method: 'POST', headers:{ 'Content-Type':'text/plain;charset=utf-8'}, body: JSON.stringify(item) });
if (!r.ok) remain.push(item);
} catch(e) { remain.push(item); }
}
localStorage.setItem('caffune_lead_queue', JSON.stringify(remain));
} catch(e) { /* ignore */ }
})();
})();
</script>