/* global React, LIcons */ // Quiz "Começar grátis" — 5 perguntas → resultado com plano recomendado → pagamento. const { useState: useQzState, useEffect: useQzEffect, useRef: useQzRef } = React; const QZ_STEPS = [ { q: 'Quantos celulares você usa hoje para postar?', sub: 'Escolha a opção mais próxima da sua operação atual.', opts: [ { t: '1 celular' }, { t: '2 a 3 celulares' }, { t: '4 a 5 celulares' }, { t: 'Mais de 5 celulares' }, ], }, { q: 'Como você posta hoje?', sub: 'Isso ajuda a calcular quanto tempo você pode economizar.', opts: [ { t: 'Faço tudo manual', d: 'Abro conta por conta e posto no tempo livre.' }, { t: 'Uso algumas automações', d: 'Agendo no PC ou uso alguma ferramenta básica.' }, { t: 'Nunca usei nenhuma automação', d: 'Todo o meu processo hoje é 100% manual.' }, ], }, { q: 'Quanto tempo você gasta por dia postando?', sub: 'Conte o tempo somando todos os celulares e contas.', opts: [ { t: 'Menos de 30 minutos' }, { t: '30 min a 1 hora' }, { t: '1 a 3 horas' }, { t: 'Mais de 3 horas' }, ], }, { q: 'Quantas contas você opera atualmente?', sub: 'Some todas as contas TikTok que você gerencia hoje.', opts: [ { t: 'Até 3 contas' }, { t: '4 a 12 contas' }, { t: '13 a 32 contas' }, { t: 'Mais de 32 contas' }, ], }, { q: 'Quanto você quer lucrar por mês com suas contas?', sub: 'Sua meta define o plano que recomendamos no final.', opts: [ { t: 'Até R$ 200' }, { t: 'R$ 500 a R$ 2.000' }, { t: 'R$ 2.000 a R$ 10.000' }, { t: 'Mais de R$ 10.000' }, ], }, ]; const QZ_PLANS = [ { name: 'Inicial', m: 29, q: 23, qTotal: 69, desc: 'Até 5 celulares · Contas ilimitadas', pot: 'Potencial: R$ 6.000/mês' }, { name: 'Escalando', m: 59, q: 50, qTotal: 149, desc: 'Até 20 celulares · Contas ilimitadas', pot: 'Potencial: R$ 24.000/mês', popular: true }, { name: 'Avançado', m: 119, q: 100, qTotal: 299, desc: 'Celulares ilimitados · Contas ilimitadas', pot: 'O céu é o seu limite' }, ]; // nome do plano + ciclo (m|q) → código do plano no backend (bate com index/assinar). const QZ_CODES = { 'Inicial': { m: 'monthly', q: 'quarterly' }, 'Escalando': { m: 'scaling_monthly', q: 'scaling_quarterly' }, 'Avançado': { m: 'advanced_monthly', q: 'advanced_quarterly' }, }; // Religa o quiz ao checkout REAL do site (login-first + from=quiz, igual à landing // atual). method: 'card' (assinatura c/ 3 dias grátis) | 'pix' (pagamento único). function qzGoCheckout(planName, cycle, method) { const code = (QZ_CODES[planName] || {})[cycle] || 'monthly'; const go = async () => { const s = window.aqSession ? await window.aqSession() : null; if (!s || !s.user) { try { localStorage.setItem('aq_pending_plan', JSON.stringify({ code: code, label: planName, method: method, from: 'quiz', })); } catch (e) {} if (window.aqLogin) window.aqLogin(); else location.href = '/login'; return; } location.href = '/assinar?plan=' + encodeURIComponent(code) + '&label=' + encodeURIComponent(planName) + '&method=' + encodeURIComponent(method) + '&from=quiz'; }; go(); } // horas/dia (ponto médio) por resposta da pergunta 3 const QZ_HOURS = [0.4, 0.75, 2, 3.5]; function qzRecommend(a) { // a = [celulares, método, tempo, contas, meta] let score = (a[0] || 0); if ((a[3] || 0) >= 2) score += a[3] - 1; if ((a[4] || 0) >= 2) score += a[4] - 1; if (score >= 4) return 2; // Avançado if (score >= 2) return 1; // Escalando return 0; // Inicial } /* contador animado 0 → alvo */ function QzCounter({ target }) { const [n, setN] = useQzState(0); useQzEffect(() => { let raf; const t0 = performance.now(); const dur = 1300; const tick = now => { const p = Math.min(1, (now - t0) / dur); setN(Math.round(target * (1 - Math.pow(1 - p, 3)))); if (p < 1) raf = requestAnimationFrame(tick); }; raf = requestAnimationFrame(tick); return () => cancelAnimationFrame(raf); }, [target]); return {n}h; } function QuizOverlay({ state, onClose }) { const open = !!state; const [step, setStep] = useQzState(0); // 0..4 const [answers, setAnswers] = useQzState([]); // índices const [view, setView] = useQzState('quiz'); // quiz | result | pay const [cycle, setCycle] = useQzState('m'); // m | q const [sel, setSel] = useQzState(null); // plano selecionado no resultado const [flash, setFlash] = useQzState(null); // opção recém-clicada const cardRef = useQzRef(null); // reset ao abrir useQzEffect(() => { if (!open) return; if (state.start === 'pay') { setView('pay'); setSel(Math.max(0, QZ_PLANS.findIndex(p => p.name === state.plan))); setCycle(state.cycle || 'm'); } else { setView('quiz'); setStep(0); setAnswers([]); setSel(null); setCycle('m'); } setFlash(null); }, [state]); // trava o scroll + esc useQzEffect(() => { if (!open) return; const prev = document.body.style.overflow; document.body.style.overflow = 'hidden'; const onKey = e => { if (e.key === 'Escape') onClose(); }; window.addEventListener('keydown', onKey); return () => { document.body.style.overflow = prev; window.removeEventListener('keydown', onKey); }; }, [open]); useQzEffect(() => { if (cardRef.current) cardRef.current.scrollTop = 0; }, [view, step]); if (!open) return null; const pick = i => { if (flash !== null) return; setFlash(i); const next = answers.slice(); next[step] = i; setAnswers(next); setTimeout(() => { setFlash(null); if (step < QZ_STEPS.length - 1) setStep(step + 1); else { setSel(qzRecommend(next)); setView('result'); } }, 260); }; const back = () => { if (view === 'pay') { setView(state.start === 'pay' ? 'pay' : 'result'); if (state.start === 'pay') onClose(); return; } if (view === 'result') { setView('quiz'); setStep(QZ_STEPS.length - 1); return; } if (step > 0) setStep(step - 1); else onClose(); }; const s = QZ_STEPS[step]; const rec = qzRecommend(answers); const hoursMonth = Math.round((QZ_HOURS[answers[2]] ?? 1) * 30 * 0.9); const plan = QZ_PLANS[sel ?? rec] || QZ_PLANS[0]; const price = cycle === 'q' ? plan.q : plan.m; const tri = cycle === 'q'; return (
{s.sub}
Plano {plan.name} · 3 dias grátis, depois R$ {price}/mês {tri && ` (cobrado R$ ${plan.qTotal} por trimestre)`}.