PageSourceSearch

https://www.darkemail.school/assets/AdminDashboard-N16OZDwP.js

js darkemail.school collected 2026-09-24 14:06:30 UTC 93,594 bytes, 1 lines download raw bytes

1import{j as e,a,S as t}from"./index-CU7wjiYh.js";import{r as s,b as l}from"./vendor-BZP-ugY9.js";import{u as r}from"./ConfirmDialog-GxBI1-m3.js";import{d as i,aQ as d,e as n,a4 as o,t as c,b as x,aR as m,aS as h,E as p,aT as b,w as u,X as g,aU as j,aV as v,P as N,aW as k,aX as f,T as y,aY as w,R as S,aZ as C,K as A,q as _,l as E,a6 as $,aO as R,a_ as P,n as T,i as I,a9 as D,az as M,a$ as L,aM as O,C as F,a7 as q,N as B,b0 as W,b1 as U,ab as V,c as z,ao as G}from"./utils-Cd-t9x0M.js";import{N as H}from"./router-ChLK7Q-7.js";import"./i18n-BX0S8Obb.js";const J=["#7c3aed","#8b5cf6","#a855f7","#c026d3","#db2777","#e11d48"],K=({steps:a})=>{const[t,l]=s.useState(!1);if(s.useEffect(()=>{const e=setTimeout(()=>l(!0),60);return()=>clearTimeout(e)},[]),!(null==a?void 0:a.length))return null;const r=a[0].count||1,i=e=>Math.max(16,Math.min(100,Math.round(100*Math.pow((e||0)/r,.4))));return e.jsx("div",{className:"w-full select-none",children:a.map((s,l)=>{const r=i(s.count),d=a[l+1],n=d?i(d.count):Math.max(10,Math.round(.72*r)),o=`polygon(${(100-r)/2}% 0%, ${(100+r)/2}% 0%, ${(100+n)/2}% 100%, ${(100-n)/2}% 100%)`,c=J[Math.min(l,J.length-1)];return e.jsxs("div",{className:"relative",style:{height:62},children:[e.jsx("div",{className:"absolute inset-0 transition-all duration-700 ease-out",style:{clipPath:o,WebkitClipPath:o,background:c,opacity:t?1:0,transform:t?"scaleY(1)":"scaleY(0.3)",transformOrigin:"top center",transitionDelay:110*l+"ms"}}),e.jsxs("div",{className:"absolute inset-0 flex flex-col items-center justify-center text-white pointer-events-none px-2 text-center",style:{opacity:t?1:0,transition:"opacity 500ms ease-out",transitionDelay:110*l+220+"ms",textShadow:"0 1px 2px rgba(0,0,0,0.25)"},children:[e.jsx("div",{className:"text-[11px] font-medium opacity-95 leading-none",children:s.label}),e.jsxs("div",{className:"text-lg font-bold tabular-nums leading-tight",children:[(x=s.count,(x||0).toLocaleString("pt-BR")),null!=s.pctOfPrev&&e.jsxs("span",{className:"text-[11px] font-normal opacity-85 ml-1.5",children:["(",s.pctOfPrev,"%)"]})]})]})]},s.key||l);var x})})},Q=e=>"R$ "+(null!=e?e:0).toFixed(2).replace(".",","),Y=e=>(null!=e?e:0).toLocaleString("pt-BR"),Z=e=>{if(!e)return"—";const a=new Date(e);return isNaN(a.getTime())?"—":a.toLocaleDateString("pt-BR")},X={active:{label:"Pagantes",desc:"Assinatura Asaas ativa e período em dia. São os ÚNICOS que contam no MRR. Anual entra no MRR já dividido por 12.",dateLabel:"renova em",badge:"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-300"},trialing:{label:"Em trial",desc:"No período de teste grátis. Têm acesso Pro mas ainda não pagaram — não contam no MRR.",dateLabel:"trial até",badge:"bg-sky-100 text-sky-700 dark:bg-sky-900/40 dark:text-sky-300"},cortesia:{label:"Cortesia",desc:"Pro dado de graça pelo admin (você, influencers, YouTubers, parcerias). NÃO paga e NUNCA entra no MRR. Dá pra revogar o acesso a qualquer momento na lista.",dateLabel:"acesso até",badge:"bg-fuchsia-100 text-fuchsia-700 dark:bg-fuchsia-900/40 dark:text-fuchsia-300"},legado:{label:"Legado (Stripe)",desc:"Acesso Pro no ar, sem assinatura Asaas e sem marca de cortesia — resquício da migração do Stripe. Não contam no MRR.",dateLabel:"acesso até",badge:"bg-violet-100 text-violet-700 dark:bg-violet-900/40 dark:text-violet-300"},past_due:{label:"Em carência",desc:"Assinatura venceu mas ainda dentro do período de carência (grace). Churn INVOLUNTÁRIO (cartão falhou etc.) — dá pra recuperar antes de virar cancelado.",dateLabel:"carência até",badge:"bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-300"},canceled:{label:"Cancelados",desc:"Já foram clientes e saíram — o plano não é mais Pro, mas têm histórico de customer_id (Asaas ou Stripe).",dateLabel:"expirou em",badge:"bg-rose-100 text-rose-700 dark:bg-rose-900/40 dark:text-rose-300"}},ee=e=>{var a;return null!=(a=X[e])?a:{label:e,desc:"Status sem descrição.",dateLabel:"data",badge:"bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-300"}},ae=({title:a,icon:t,children:s})=>e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4 text-slate-900 dark:text-white font-bold",children:[t,a]}),s]}),te=()=>{var a,t,l,m,h,p;const[b,u]=s.useState(null),[g,j]=s.useState(!0),[v,N]=s.useState(""),[k,f]=s.useState("28d"),[y,w]=s.useState(null),{confirm:S,dialog:C}=r(),[A,_]=s.useState(null),[E,$]=s.useState(null),R=async e=>{j(!0),N("");try{const a=await fetch(`/api/admin/funnel?range=${e}`,{credentials:"include"});if(403===a.status)return void N("Sem permissão (ADMIN_EMAILS).");if(!a.ok)return void N("Erro "+a.status);u(await a.json())}catch(a){N(a.message)}finally{j(!1)}};s.useEffect(()=>{R(k)},[k]);if(g&&!b)return e.jsxs("div",{className:"flex items-center gap-2 text-slate-500 text-sm py-6",children:[e.jsx(i,{className:"w-4 h-4 animate-spin"})," Carregando funil…"]});if(v)return e.jsxs("div",{className:"bg-rose-50 dark:bg-rose-900/20 border border-rose-200 dark:border-rose-800 rounded-lg p-4 text-rose-700 dark:text-rose-300 text-sm",children:["Funil: ",v]});if(!b)return null;const{ga4:P,stripe:T,onboarding:I,extension:D}=b;return e.jsxs("div",{className:"space-y-4",children:[C,e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("h2",{className:"text-xl font-bold text-slate-900 dark:text-white",children:["Funil & Receita · ",null!=(a=b.label)?a:`últimos ${b.days} dias`,g&&e.jsx(i,{className:"inline w-4 h-4 ml-2 animate-spin text-slate-400"})]}),e.jsx("div",{className:"flex flex-wrap gap-1",role:"group","aria-label":"Período",children:[["today","Hoje"],["yesterday","Ontem"],["7d","7 dias"],["28d","28 dias"],["30d","30 dias"]].map(([a,t])=>e.jsx("button",{type:"button",onClick:()=>f(a),"aria-pressed":k===a?"true":"false",className:"px-3 py-1.5 rounded-lg text-sm font-medium transition-colors "+(k===a?"bg-violet-600 text-white":"bg-slate-100 dar
1k:bg-slate-800 text-slate-700 dark:text-slate-300 hover:bg-slate-200 dark:hover:bg-slate-700"),children:t},a))})]}),e.jsx("p",{className:"text-xs text-slate-400 -mt-2",children:"Assinaturas (Asaas) = estado real no banco (pro_users) — não muda com o período. Stripe foi encerrado."}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsx(ae,{title:"Funil de conversão (GA4)",icon:e.jsx(d,{className:"w-4 h-4 text-violet-500"}),children:P.configured?P.error?e.jsxs("p",{className:"text-sm text-rose-600 dark:text-rose-400",children:["Erro GA4: ",P.error]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"text-xs text-slate-500 mb-3",children:[Y(P.users)," usuários · ",Y(P.sessions)," sessões · ",Y(P.pageviews)," pageviews"]}),e.jsx(K,{steps:P.funnel||[]}),e.jsxs("p",{className:"mt-2 text-[11px] leading-snug text-amber-600 dark:text-amber-400",children:["⚠️ ",e.jsx("strong",{children:'"Assinou"'})," conta o evento GA4 disparado no site. Como o pagamento é concluído no Asaas (fora do site), a maioria das assinaturas ",e.jsx("strong",{children:"não registra aqui"})," — o número real de pagantes está em ",e.jsx("strong",{children:'"Assinaturas (Asaas)"'})," ao lado."]}),P.diagnostics&&e.jsxs("div",{className:"mt-4 pt-3 border-t border-slate-100 dark:border-slate-800 text-xs text-slate-500 space-y-1",children:[e.jsxs("div",{children:["Barra Pro: ",Y(P.diagnostics.pro_bar_impression)," impressões → ",Y(P.diagnostics.pro_bar_click)," cliques (",P.diagnostics.pro_bar_impression?(P.diagnostics.pro_bar_click/P.diagnostics.pro_bar_impression*100).toFixed(2):0,"%)"]}),e.jsxs("div",{children:["Trava de login: ",Y(P.diagnostics.checkout_auth_redirect)," redirects pro signup no checkout"]}),e.jsxs("div",{children:["Pix/Boleto anual: ",Y(P.diagnostics.click_pix_annual),' cliques no botão "Pagar 1 ano à vista"']}),e.jsxs("div",{children:["Nudge na caixa: ",Y(P.diagnostics.pro_inbox_nudge_shown)," exibições → ",Y(P.diagnostics.pro_inbox_nudge_click)," cliques"]})]})]}):e.jsxs("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:["GA4 não configurado. Adicione ",e.jsx("code",{className:"font-mono",children:"GA4_SA_JSON"})," (conteúdo do JSON da service account) no Vercel.",P.error&&e.jsx("span",{className:"block mt-1 text-xs text-slate-500",children:P.error})]})}),e.jsx(ae,{title:"Assinaturas (Asaas)",icon:e.jsx(n,{className:"w-4 h-4 text-fuchsia-500"}),children:T.configured?T.error?e.jsxs("p",{className:"text-sm text-rose-600 dar
1k:text-rose-400",children:["Erro: ",T.error]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3 mb-3",children:[e.jsxs("div",{title:"MRR = receita mensal recorrente. Só pagantes Asaas ativos. Plano anual entra dividido por 12 (R$179,88/ano = R$14,99/mês), por isso o valor parece baixo mesmo com pagamento à vista já recebido.",children:[e.jsx("div",{className:"text-2xl font-bold text-slate-900 dark:text-white tabular-nums cursor-help",children:Q(T.mrrBrl)}),e.jsx("div",{className:"text-xs text-slate-500 cursor-help border-b border-dotted border-slate-300 dark:border-slate-600 inline-block",children:"MRR (pagantes ativos)"})]}),e.jsxs("div",{title:"Pagantes = assinatura Asaas ativa e em dia. Trial = em teste grátis, ainda não pagou.",children:[e.jsx("div",{className:"text-2xl font-bold text-slate-900 dark:text-white tabular-nums cursor-help",children:Y(T.active)}),e.jsxs("div",{className:"text-xs text-slate-500 cursor-help",children:["ativas · ",Y(T.trialing)," trial"]})]})]}),e.jsx("div",{className:"flex flex-wrap gap-2 text-xs",children:Object.entries(T.subscriptionsByStatus||{}).map(([a,t])=>{const s=ee(a),l=y===a;return e.jsxs("button",{type:"button",title:s.desc,"aria-pressed":l,onClick:()=>w(l?null:a),className:`px-2.5 py-1 rounded-full font-medium transition-shadow ${s.badge} ${l?"ring-2 ring-offset-1 ring-offset-white dark:ring-offset-slate-900 ring-current":"hover:brightness-95 dark:hover:brightness-110"}`,children:[s.label,": ",t]},a)})}),y&&(()=>{var a,t,s;const l=ee(y),r=(null==(a=T.membersByStatus)?void 0:a[y])||[],d=null!=(s=null==(t=T.subscriptionsByStatus)?void 0:t[y])?s:r.length;return e.jsxs("div",{className:"mt-3 border border-slate-200 dark:border-slate-700 rounded-lg overflow-hidden",children:[e.jsxs("div",{className:"px-3 py-2 bg-slate-50 dark:bg-slate-800/60 border-b border-slate-200 dark:border-slate-700",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("span",{className:"text-sm font-bold text-slate-900 dark:text-white",children:[l.label," ",e.jsxs("span",{className:"text-slate-400 font-normal",children:["(",Y(d),")"]})]}),e.jsx("button",{type:"button",onClick:()=>w(null),className:"text-xs text-slate-500 hover:text-slate-700 dark:hover:text-slate-300",children:"fechar ✕"})]}),e.jsx("p",{className:"text-xs text-slate-500 mt-0.5",children:l.desc})]}),0===r.length?e.jsx("div",{className:"px-3 py-3 text-xs text-slate-500",children:"Nenhum usuário pra mostrar."}):e.jsx("ul",{className:"max-h-64 overflow-y-auto divide-y divide-slate-100 dark:divide-slate-800",children:r.map((a,t)=>e.jsxs("li",{className:"px-3 py-1.5 flex items-center justify-between gap-3 text-xs",children:[e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"font-mono text-slate-700 dark:text-slate-300 truncate block",title:a.email,children:a.email}),a.note&&e.jsxs("span",{className:"text-[11px] text-fuchsia-600 dark:text-fuchsia-400 truncate block",title:a.note,children:["🎁 ",a.note]})]}),e.jsxs("span",{className:"shrink-0 text-slate-400 tabular-nums",title:`${l.dateLabel}${a.plan?" · "+a.plan:""}`,children:[l.dateLabel," ",Z(a.date)]}),"cortesia"===y&&a.id&&e.jsx("button",{type:"button",onClick:()=>(async e=>{if(await S({title:"Revogar cortesia?",message:`${e.email} perde o acesso Pro na hora e volta pra free. A marca de cortesia some. Dá pra conceder de novo depois pelo painel de usuários.`,confirmLabel:"Revogar acesso",tone:"danger"})){_(e.id),$(null);try{const a=await fetch("/api/admin/user-plan",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({userId:e.id,plan:"free"})});if(!a.ok){const e=await a.json().catch(()=>({}));throw new Error(e.error||`HTTP ${a.status}`)}await R(k)}catch(a){$(`Falha ao revogar ${e.email}: ${a.message}`)}finally{_(null)}}})(a),disabled:A===a.id,title:`Revogar o Pro de cortesia de ${a.email} — volta pra free na hora.`,className:"shrink-0 px-2 py-0.5 rounded border border-rose-300 dark:border-rose-800 text-rose-600 dar
1k:text-rose-400 hover:bg-rose-50 dark:hover:bg-rose-900/30 disabled:opacity-50",children:A===a.id?e.jsx(i,{className:"w-3 h-3 animate-spin"}):"revogar"})]},a.id||`${a.email}-${t}`))}),d>r.length&&e.jsxs("div",{className:"px-3 py-1.5 text-[11px] text-slate-400 border-t border-slate-100 dark:border-slate-800",children:["Mostrando ",r.length," de ",Y(d)," (limitado a 200)."]}),E&&e.jsx("div",{className:"px-3 py-1.5 text-[11px] text-rose-600 dark:text-rose-400 border-t border-rose-100 dark:border-rose-900",children:E})]})})(),T.dunning&&T.dunning.invoices>0&&e.jsxs("button",{type:"button",onClick:()=>w("past_due"),title:"Contas com assinatura vencida ainda no período de carência. São o mesmo grupo do badge 'Em carência'. Valor = estimativa da mensalidade recuperável (R$19,99 por conta).",className:"mt-3 w-full text-left text-sm text-amber-700 dark:text-amber-300 flex items-center gap-1.5 hover:underline",children:[e.jsx(o,{className:"w-4 h-4 shrink-0"})," ",T.dunning.invoices," conta(s) em carência (",Q(T.dunning.amountBrl),") — clique pra ver quem"]})]}):e.jsx("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:"Sem dados de assinatura (pro_users)."})})]}),e.jsx(ae,{title:"Onboarding / nutrição de leads",icon:e.jsx(c,{className:"w-4 h-4 text-sky-500"}),children:I.configured?I.error?e.jsxs("p",{className:"text-sm text-rose-600 dar
1k:text-rose-400",children:["Erro: ",I.error]}):e.jsxs(e.Fragment,{children:[!I.resendConfigured&&e.jsxs("div",{className:"mb-3 bg-rose-50 dark:bg-rose-900/20 border border-rose-200 dark:border-rose-800 rounded-lg p-3 text-rose-700 dark:text-rose-300 text-sm flex items-center gap-2",children:[e.jsx(o,{className:"w-4 h-4"})," ",e.jsx("strong",{children:"RESEND_API_KEY ausente"})," — nenhum email de onboarding está sendo enviado!"]}),e.jsxs("div",{className:"flex items-baseline gap-3 mb-3",children:[e.jsxs("span",{className:"text-3xl font-bold tabular-nums "+((null!=(t=I.coveragePct)?t:0)>=90?"text-emerald-600":(null!=(l=I.coveragePct)?l:0)>=60?"text-amber-600":"text-rose-600"),children:[null!=(m=I.coveragePct)?m:0,"%"]}),e.jsxs("span",{className:"text-sm text-slate-500",children:["cobertura de boas-vindas · ",Y(I.welcomeSent),"/",Y(I.totalAccounts)," contas com email real (últimos ",null!=(h=I.windowDays)?h:b.days,"d)",!!I.anonCount&&e.jsxs("span",{className:"text-slate-400",children:[" · ",Y(I.anonCount)," anônima(s) @darkemail.school fora da conta"]})]})]}),e.jsxs("div",{className:"flex flex-wrap gap-2 text-xs mb-2",children:[Object.entries(I.perCheckpoint||{}).map(([a,t])=>e.jsxs("span",{className:"px-2 py-1 rounded-full bg-sky-50 dark:bg-sky-900/20 text-sky-700 dark:text-sky-300",children:[a,": ",t]},a)),!!I.nurtureWelcomeSent&&e.jsxs("span",{className:"px-2 py-1 rounded-full bg-violet-50 dark:bg-violet-900/20 text-violet-700 dark:text-violet-300",children:["n_welcome (free): ",Y(I.nurtureWelcomeSent)]})]}),I.missingWelcome&&I.missingWelcome.length>0&&e.jsxs("details",{className:"mt-2 text-sm",children:[e.jsxs("summary",{className:"cursor-pointer text-rose-600 dar
1k:text-rose-400",children:[I.missingWelcome.length," conta(s) SEM email de boas-vindas"]}),e.jsx("ul",{className:"mt-2 space-y-0.5 text-xs text-slate-500 max-h-40 overflow-auto",children:I.missingWelcome.map(a=>e.jsxs("li",{children:[a.email," · ",new Date(a.created_at).toLocaleDateString("pt-BR")]},a.id))})]}),e.jsx("p",{className:"mt-2 text-xs text-slate-400",children:I.note})]}):e.jsx("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:"Redis não configurado — não dá pra medir cobertura."})}),e.jsx(ae,{title:"Extensão Chrome · uso real",icon:e.jsx(x,{className:"w-4 h-4 text-emerald-500"}),children:D&&D.configured?D.error?e.jsxs("p",{className:"text-sm text-rose-600 dark:text-rose-400",children:["Erro: ",D.error]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"text-xs text-slate-500 mb-3",children:["Funil de ativação · últimos ",null!=(p=D.days)?p:b.days," dias ·"," ",D.ga4Forwarding?e.jsx("span",{className:"text-emerald-600",children:"espelhando no GA4"}):e.jsx("span",{className:"text-amber-600",children:"só Redis (sem GA4_MP_API_SECRET)"})]}),e.jsx("div",{className:"space-y-2",children:(D.funnel||[]).map(a=>{var t,s;return e.jsxs("div",{children:[e.jsxs("div",{className:"flex justify-between text-sm mb-0.5",children:[e.jsx("span",{className:"text-slate-700 dark:text-slate-300",children:a.label}),e.jsxs("span",{className:"tabular-nums text-slate-900 dark:text-white font-semibold",children:[Y(a.count),null!==a.pctOfPrev&&e.jsxs("span",{className:"ml-2 text-xs "+(a.pctOfPrev>=50?"text-emerald-600":a.pctOfPrev>=25?"text-amber-600":"text-rose-600"),children:[a.pctOfPrev,"%↘"]})]})]}),e.jsx("div",{className:"h-2 rounded-full bg-slate-100 dark:bg-slate-800 overflow-hidden",children:e.jsx("div",{className:"h-full "+(s=a.pctOfPrev,null===s?"bg-slate-400":s>=50?"bg-emerald-500":s>=25?"bg-amber-500":"bg-rose-500"),style:{width:`${null!=(t=a.pctOfPrev)?t:100}%`}})})]},a.key)})}),e.jsxs("div",{className:"mt-4 pt-3 border-t border-slate-100 dark:border-slate-800",children:[e.jsx("div",{className:"text-xs text-slate-500 mb-1.5",children:"Totais (all-time)"}),e.jsxs("div",{className:"flex flex-wrap gap-2 text-xs",children:[Object.entries(D.allTime||{}).filter(([,e])=>e>0).map(([a,t])=>e.jsxs("span",{className:"px-2 py-1 rounded-full bg-emerald-50 dark:bg-emerald-900/20 text-emerald-700 dark:text-emerald-300",children:[a,": ",Y(t)]},a)),Object.values(D.allTime||{}).every(e=>!e)&&e.jsx("span",{className:"text-slate-400",children:"Sem eventos ainda — aparece quando usuários rodarem a v1.7.7."})]}),D.onboarding&&e.jsxs("div",{className:"mt-2 text-xs text-slate-500",children:["Onboarding: ",Y(D.onboarding.shown)," exibições → ",Y(D.onboarding.dismissed)," dispensados"]})]})]}):e.jsx("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:"Redis não configurado — sem dados de uso da extensão."})})]})},se=1e6,le=e=>e.toLocaleString("pt-BR"),re=()=>{const[a,t]=s.useState(null),[l,r]=s.useState(!0);if(s.useEffect(()=>{let e=!0;return(async()=>{var a,s;try{const l=await fetch("/api/admin/funnel?range=30d",{credentials:"include"});if(!l.ok)return;const r=await l.json();e&&(null==(a=null==r?void 0:r.ga4)?void 0:a.configured)&&!r.ga4.error&&t(null!=(s=r.ga4.pageviews)?s:0)}catch(l){}finally{e&&r(!1)}})(),()=>{e=!1}},[]),l||null===a)return null;const i=a>=se,d=Math.min(100,a/se*100),n=Math.max(0,se-a);return i?e.jsx("div",{className:"rounded-xl border-2 border-emerald-400 dark:border-emerald-600 bg-emerald-50 dark:bg-emerald-950/40 p-5",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(m,{className:"w-7 h-7 text-emerald-600 dark:text-emerald-400 shrink-0"}),e.jsxs("div",{children:[e.jsx("div",{className:"text-lg font-bold text-emerald-800 dark:text-emerald-200",children:"🎉 Marco de 1 milhão de views atingido!"}),e.jsxs("div",{className:"text-sm text-emerald-700 dark:text-emerald-300",children:[le(a)," pageviews nos últimos 30 dias — já dá pra ativar as propagandas (AdSense)."]})]})]})}):e.jsxs("div",{className:"rounded-xl border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900 p-5",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2 text-slate-900 dark:text-white font-bold",children:[e.jsx(h,{className:"w-4 h-4 text-violet-500"}),"Marco pra ativar propagandas (AdSense)"]}),e.jsxs("div",{className:"flex items-baseline gap-2 mb-2",children:[e.jsx("span",{className:"text-2xl font-bold tabular-nums text-slate-900 dark:text-white",children:le(a)}),e.jsxs("span",{className:"text-sm text-slate-500",children:["/ ",le(se)," views (30d) · ",d.toFixed(1),"%"]})]}
1),e.jsx("div",{className:"h-3 rounded-full bg-slate-100 dark:bg-slate-800 overflow-hidden",children:e.jsx("div",{className:"h-full bg-gradient-to-r from-violet-500 to-fuchsia-500 transition-all",style:{width:`${d}%`}})}),e.jsxs("div",{className:"mt-2 text-xs text-slate-500",children:["Faltam ",e.jsx("strong",{className:"text-slate-700 dark:text-slate-300",children:le(n)})," views pro marco. Ao chegar em 1M/mês, libera ativar o AdSense."]})]})},ie=e=>(e||0).toLocaleString("pt-BR"),de=()=>{const[a,t]=s.useState(null),[l,r]=s.useState(!0),[d,n]=s.useState(null);return s.useEffect(()=>{fetch("/api/admin/email-report?days=30",{credentials:"include"}).then(async e=>{if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.json()}).then(t).catch(e=>n(e.message)).finally(()=>r(!1))},[]),e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(c,{className:"w-4 h-4 text-sky-500"}),e.jsx("h3",{className:"text-sm font-semibold text-slate-700 dark:text-slate-200",children:"Performance dos emails · últimos 30 dias"})]}),e.jsx("p",{className:"text-xs text-slate-400 mb-4",children:"Abertura via pixel · clique via redirect. CTO = clique ÷ abertura (engajamento do conteúdo)."}),l?e.jsxs("div",{className:"flex items-center gap-2 text-slate-400 text-sm",children:[e.jsx(i,{className:"w-4 h-4 animate-spin"})," carregando…"]}):d?e.jsxs("p",{className:"text-sm text-rose-500",children:["Erro: ",d]}):a&&0!==a.totals.sent?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3 mb-4",children:[e.jsx(ne,{label:"Enviados",value:ie(a.totals.sent)}),e.jsx(ne,{label:"Abertura",value:`${a.totals.openRate}%`,sub:`${ie(a.totals.opened)} abriram`,icon:e.jsx(p,{className:"w-3.5 h-3.5"})}),e.jsx(ne,{label:"CTR",value:`${a.totals.ctr}%`,sub:`${ie(a.totals.clicked)} clicaram`,icon:e.jsx(b,{className:"w-3.5 h-3.5"})}),e.jsx(ne,{label:"CTO",value:`${a.totals.cto}%`,sub:"clique ÷ abertura"})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"text-xs text-slate-500 dark:text-slate-400 uppercase border-b border-slate-200 dark:border-slate-700",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left py-2 px-2",children:"Campanha · etapa"}),e.jsx("th",{className:"text-right py-2 px-2",children:"Enviados"}),e.jsx("th",{className:"text-right py-2 px-2",children:"Abertura"}),e.jsx("th",{className:"text-right py-2 px-2",children:"CTR"}),e.jsx("th",{className:"text-right py-2 px-2",children:"CTO"})]})}),e.jsx("tbody",{children:a.byCampaign.map((a,t)=>e.jsxs("tr",{className:"border-b border-slate-100 dark:border-slate-800",children:[e.jsxs("td",{className:"py-2 px-2",children:[e.jsxs("div",{className:"text-slate-700 dark:text-slate-200 font-medium",children:[a.campaign," · ",a.checkpoint]}),a.sampleSubject&&e.jsx("div",{className:"text-xs text-slate-400 truncate max-w-[280px]",title:a.sampleSubject,children:a.sampleSubject})]}),e.jsx("td",{className:"py-2 px-2 text-right tabular-nums",children:ie(a.sent)}),e.jsxs("td",{className:"py-2 px-2 text-right tabular-nums font-semibold text-emerald-600 dark:text-emerald-400",children:[a.openRate,"%"]}),e.jsxs("td",{className:"py-2 px-2 text-right tabular-nums",children:[a.ctr,"%"]}),e.jsxs("td",{className:"py-2 px-2 text-right tabular-nums text-violet-600 dark:text-violet-400",children:[a.cto,"%"]})]},t))})]})}),e.jsxs("div",{className:"mt-5",children:[e.jsx("div",{className:"text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase mb-2",children:"Últimos envios (recebeu → abriu → clicou)"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsx("table",{className:"w-full text-sm",children:e.jsx("tbody",{children:a.recent.map((a,t)=>e.jsxs("tr",{className:"border-b border-slate-100 dark:border-slate-800",children:[e.jsx("td",{className:"py-1.5 px-2 text-slate-700 dark:text-slate-200 truncate max-w-[220px]",title:a.email,children:a.email||"—"}),e.jsxs("td",{className:"py-1.5 px-2 text-xs text-slate-400",children:[a.campaign,"·",a.checkpoint]}),e.jsx("td",{className:"py-1.5 px-2 text-center",title:"recebeu",children:e.jsx(u,{className:"w-4 h-4 text-slate-400 inline"})}),e.jsx("td",{className:"py-1.5 px-2 text-center",title:a.opened?"abriu":"não abriu",children:a.opened?e.jsx(p,{className:"w-4 h-4 text-emerald-500 inline"}):e.jsx(g,{className:"w-4 h-4 text-slate-300 dark:text-slate-700 inline"})}),e.jsx("td",{className:"py-1.5 px-2 text-center",title:a.clicked?"clicou":"não clicou",children:a.clicked?e.jsx(b,{className:"w-4 h-4 text-violet-500 inline"}):e.jsx(g,{className:"w-4 h-4 text-slate-300 dark:text-slate-700 inline"})})]},t))})})})]})]}):e.jsx("p",{className:"text-sm text-slate-500",children:"Nenhum email rastreado ainda. Assim que as sequências (onboarding, nurture, winback, expiry) dispararem, os dados aparecem aqui."})]})},ne=({label:a,value:t,sub:s,icon:l})=>e.jsxs("div",{className:"bg-slate-50 dark:bg-slate-800/50 rounded-lg p-3",children:[e.jsxs("div",{className:"flex items-center gap-1 text-xs text-slate-500 dark:text-slate-400",children:[l,a]}),e.jsx("div",{className:"text-xl font-bold text-slate-900 dark:text-white tabular-nums",children:t}),s&&e.jsx("div",{className:"text-xs text-slate-400",children:s})]}),oe=e=>
1(e||0).toLocaleString("pt-BR"),ce=()=>{const[a,t]=s.useState(null),[l,r]=s.useState(!0),[d,n]=s.useState(null);return s.useEffect(()=>{fetch("/api/admin/business-funnel",{credentials:"include"}).then(async e=>{if(!e.ok)throw new Error(`HTTP ${e.status}`);return e.json()}).then(t).catch(e=>n(e.message)).finally(()=>r(!1))},[]),e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(j,{className:"w-4 h-4 text-fuchsia-500"}),e.jsx("h3",{className:"text-sm font-semibold text-slate-700 dark:text-slate-200",children:"Funil de negócio · signup → pagante"})]}),e.jsx("p",{className:"text-xs text-slate-400 mb-4",children:'"Quanto do que chegou virou crescimento real?" — o que importa, não só o tráfego. Só contas com email real.'}),l?e.jsxs("div",{className:"flex items-center gap-2 text-slate-400 text-sm",children:[e.jsx(i,{className:"w-4 h-4 animate-spin"})," carregando…"]}):d?e.jsxs("p",{className:"text-sm text-rose-500",children:["Erro: ",d]}):a?e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[e.jsx("div",{children:e.jsx(K,{steps:a.funnel})}),e.jsxs("div",{children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3 mb-4",children:[e.jsx(xe,{label:"Signup → ativou",value:`${a.rates.signupToActivated}%`}),e.jsx(xe,{label:"Ativou → trial",value:`${a.rates.activatedToTrial}%`}),e.jsx(xe,{label:"Trial → pagou",value:`${a.rates.trialToPaid}%`,highlight:!0}),e.jsx(xe,{label:"Signup → pagou",value:`${a.rates.signupToPaid}%`})]}),e.jsx("div",{className:"text-xs font-semibold text-slate-500 dark:text-slate-400 uppercase mb-2",children:"Coortes por mês"}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-xs",children:[e.jsx("thead",{className:"text-slate-500 dark:text-slate-400 uppercase border-b border-slate-200 dark:border-slate-700",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left py-1.5 px-1",children:"Mês"}),e.jsx("th",{className:"text-right py-1.5 px-1",children:"Signups"}),e.jsx("th",{className:"text-right py-1.5 px-1",children:"Ativou"}),e.jsx("th",{className:"text-right py-1.5 px-1",children:"Trial"}),e.jsx("th",{className:"text-right py-1.5 px-1",children:"Pagou"})]})}),e.jsx("tbody",{children:a.cohorts.map(a=>e.jsxs("tr",{className:"border-b border-slate-100 dark:border-slate-800",children:[e.jsx("td",{className:"py-1.5 px-1 font-medium text-slate-700 dark:text-slate-200",children:a.month}),e.jsx("td",{className:"py-1.5 px-1 text-right tabular-nums",children:oe(a.signups)}),e.jsxs("td",{className:"py-1.5 px-1 text-right tabular-nums",children:[oe(a.activated)," ",e.jsxs("span",{className:"text-slate-400",children:["(",a.actRate,"%)"]})]}),e.jsx("td",{className:"py-1.5 px-1 text-right tabular-nums",children:oe(a.trials)}),e.jsxs("td",{className:"py-1.5 px-1 text-right tabular-nums text-emerald-600 dark:text-emerald-400",children:[oe(a.paid)," ",e.jsxs("span",{className:"text-slate-400",children:["(",a.payRate,"%)"]})]})]},a.month))})]})})]}),e.jsxs("div",{className:"lg:col-span-2 mt-1 text-xs text-slate-500 dark:text-slate-400 bg-slate-50 dark:bg-slate-800/50 rounded-lg p-3",children:[e.jsxs("div",{className:"flex items-center gap-1 font-semibold mb-1",children:[e.jsx(v,{className:"w-3.5 h-3.5"})," Como é medido + o que ainda falta"]}),e.jsx("ul",{className:"list-disc pl-4 space-y-0.5",children:a.notes.map((a,t)=>e.jsx("li",{children:a},t))})]})]}):null]})},xe=({label:a,value:t,highlight:s})=>e.jsxs("div",{className:"rounded-lg p-3 "+(s?"bg-fuchsia-50 dark:bg-fuchsia-900/20 border border-fuchsia-200 dark:border-fuchsia-800":"bg-slate-50 dark:bg-slate-800/50"),children:[e.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-400",children:a}),e.jsx("div",{className:"text-xl font-bold text-slate-900 dark:text-white tabular-nums",children:t})]}),me={checkpoint:"",day:0,subject:"",lead:"",cta_label:"",cta_target:"inbox",enabled:!0,stats:{sent:0,opened:0,clicked:0,openRate:0,ctr:0,cto:0}},he=(e,a,t)=>e>=a?"text-emerald-600 dark:text-emerald-400":e>
1=t?"text-amber-600 dark:text-amber-400":"text-rose-600 dark:text-rose-400",pe=()=>{var a;const[t,l]=s.useState(null),[r,d]=s.useState(!0),[n,o]=s.useState(null),[x,m]=s.useState(null),[h,u]=s.useState(me),[g,j]=s.useState(!1),[v,w]=s.useState(null),S=s.useCallback(async()=>{d(!0),o(null);try{const e=await fetch("/api/admin/onboarding-templates?days=30",{credentials:"include"});if(403===e.status)throw new Error("Sem permissão (ADMIN_EMAILS).");if(!e.ok)throw new Error(`HTTP ${e.status}`);l(await e.json())}catch(e){o(e.message)}finally{d(!1)}},[]);s.useEffect(()=>{S()},[S]);const C=()=>{m(null),w(null)},A=async()=>{j(!0),w(null);const e="__new__"===x;try{const a=await fetch("/api/admin/onboarding-templates",{method:e?"POST":"PUT",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify(h)}),t=await a.json().catch(()=>({}));if(!a.ok)throw new Error(t.error||t.message||`HTTP ${a.status}`);m(null),await S()}catch(a){w(a.message)}finally{j(!1)}};return e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 mb-1 flex-wrap",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(c,{className:"w-4 h-4 text-sky-500"}),e.jsx("h3",{className:"text-sm font-semibold text-slate-700 dark:text-slate-200",children:"Régua de onboarding / nutrição · editável"})]}),e.jsxs("button",{onClick:()=>{w(null),m("__new__"),u({...me})},disabled:"__new__"===x,className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-violet-600 hover:bg-violet-700 text-white text-xs font-medium disabled:opacity-50",children:[e.jsx(N,{className:"w-3.5 h-3.5"})," Nova etapa"]})]}),e.jsxs("p",{className:"text-xs text-slate-400 mb-4",children:["Cada linha é um email da sequência do trial. Edite o dia (régua), o título, o conteúdo e o botão. Abertura/clique dos últimos ",null!=(a=null==t?void 0:t.days)?a:30," dias por etapa.",(null==t?void 0:t.placeholders)&&e.jsxs(e.Fragment,{children:[" Placeholders: ",t.placeholders.map(a=>e.jsx("code",{className:"mx-0.5 px-1 rounded bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300",title:a.desc,children:a.token},a.token))]})]}),r&&!t?e.jsxs("div",{className:"flex items-center gap-2 text-slate-400 text-sm",children:[e.jsx(i,{className:"w-4 h-4 animate-spin"})," carregando…"]}):n?e.jsxs("p",{className:"text-sm text-rose-500",children:["Erro: ",n]}):e.jsxs("div",{className:"space-y-3",children:["__new__"===x&&e.jsx(ge,{draft:h,setDraft:u,onSave:A,onCancel:C,saving:g,formErr:v,isNew:!0}),0===((null==t?void 0:t.templates)||[]).length&&"__new__"!==x&&e.jsx("p",{className:"text-sm text-slate-500",children:'Nenhuma etapa cadastrada. A régua está usando os defaults do código — clique em "Nova etapa" pra começar a customizar (ou rode a migration 0013 pra popular).'}),((null==t?void 0:t.templates)||[]).map(a=>{return x===a.checkpoint?e.jsx(ge,{draft:h,setDraft:u,onSave:A,onCancel:C,saving:g,formErr:v},a.checkpoint):e.jsx("div",{className:"border rounded-lg p-3 "+(a.enabled?"border-slate-200 dark:border-slate-700":"border-dashed border-slate-300 dark:border-slate-700 opacity-70"),children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"flex flex-col items-center pt-0.5 shrink-0",children:[e.jsx(k,{className:"w-4 h-4 text-slate-300 dark:text-slate-600"}),e.jsxs("span",{className:"mt-1 px-2 py-0.5 rounded-md bg-slate-100 dark:bg-slate-800 text-xs font-bold tabular-nums text-slate-700 dark:text-slate-200",title:"Dia da régua",children:["D",a.day]})]}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 flex-wrap",children:[e.jsx("span",{className:"text-xs font-mono px-1.5 py-0.5 rounded bg-sky-50 dark:bg-sky-900/20 text-sky-700 dark:text-sky-300",children:a.checkpoint}),!a.enabled&&e.jsx("span",{className:"text-xs px-1.5 py-0.5 rounded bg-slate-100 dark:bg-slate-800 text-slate-500",children:"desativado"}),e.jsxs("span",{className:"text-xs text-slate-400",children:["botão → ","pro"===a.cta_target?"/pt/pro":"/pt/pro/caixa"]})]}),e.jsx("div",{className:"mt-1 text-sm font-medium text-slate-800 dark:text-slate-100 truncate",title:a.subject,children:a.subject}),e.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-400 line-clamp-2",children:(s=a.lead,s.replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim())}
1),e.jsxs("div",{className:"mt-0.5 text-xs text-violet-600 dark:text-violet-400",children:["▸ ",a.cta_label]}),e.jsxs("div",{className:"mt-2 flex items-center gap-4 text-xs",children:[e.jsxs("span",{className:"text-slate-500",children:[(t=a.stats.sent,(t||0).toLocaleString("pt-BR"))," enviados"]}),e.jsxs("span",{className:`inline-flex items-center gap-1 tabular-nums font-semibold ${he(a.stats.openRate,40,20)}`,children:[e.jsx(p,{className:"w-3.5 h-3.5"})," ",a.stats.openRate,"% abertura"]}),e.jsxs("span",{className:`inline-flex items-center gap-1 tabular-nums font-semibold ${he(a.stats.ctr,8,3)}`,children:[e.jsx(b,{className:"w-3.5 h-3.5"})," ",a.stats.ctr,"% clique"]}),e.jsxs("span",{className:"text-slate-400 tabular-nums hidden sm:inline",title:"clique ÷ abertura",children:["CTO ",a.stats.cto,"%"]})]})]}),e.jsxs("div",{className:"flex flex-col gap-1 shrink-0",children:[e.jsxs("label",{className:"inline-flex items-center gap-1 text-xs text-slate-500 cursor-pointer select-none",title:"Ativar/desativar o envio desta etapa",children:[e.jsx("input",{type:"checkbox",checked:a.enabled,onChange:()=>(async e=>{try{await fetch("/api/admin/onboarding-templates",{method:"PUT",credentials:"include",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,enabled:!e.enabled})}),await S()}catch(a){}})(a),className:"accent-violet-600"})," ativo"]}),e.jsxs("button",{onClick:()=>(e=>{w(null),m(e.checkpoint),u({...e})})(a),className:"inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs bg-slate-100 hover:bg-slate-200 dark:bg-slate-800 dark:hover:bg-slate-700 text-slate-700 dark:text-slate-200",children:[e.jsx(f,{className:"w-3.5 h-3.5"})," editar"]}),e.jsxs("button",{onClick:()=>(async e=>{if(window.confirm(`Remover a etapa "${e}" da régua? Os envios já feitos e suas estatísticas são preservados.`))try{await fetch(`/api/admin/onboarding-templates?checkpoint=${encodeURIComponent(e)}`,{method:"DELETE",credentials:"include"}),await S()}catch(a){}})(a.checkpoint),className:"inline-flex items-center gap-1 px-2 py-1 rounded-md text-xs text-rose-600 hover:bg-rose-50 dark:hover:bg-rose-900/20",children:[e.jsx(y,{className:"w-3.5 h-3.5"})," remover"]})]})]})},a.checkpoint);var t,s})]})]})},be="w-full px-2.5 py-1.5 rounded-md border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-800 text-sm text-slate-800 dark:text-slate-100 focus:outline-none focus:ring-2 focus:ring-violet-500",ue="block text-xs font-medium text-slate-500 dark:text-slate-400 mb-1",ge=({draft:a,setDraft:t,onSave:s,onCancel:l,saving:r,formErr:d,isNew:n})=>{const o=e=>t({...a,...e});return e.jsxs("div",{className:"border-2 border-violet-300 dark:border-violet-700 rounded-lg p-4 bg-violet-50/40 dark:bg-violet-900/10",children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-[1fr_100px_120px] gap-3 mb-3",children:[e.jsxs("div",{children:[e.jsxs("label",{className:ue,children:["Checkpoint (slug)",n&&" — imutável depois"]}),e.jsx("input",{className:`${be} font-mono ${n?"":"opacity-60 cursor-not-allowed"}`,value:a.checkpoint,disabled:!n,placeholder:"ex: d9_case",onChange:e=>o({checkpoint:e.target.value.toLowerCase()})})]}),e.jsxs("div",{children:[e.jsx("label",{className:ue,children:"Dia da régua"}),e.jsx("input",{type:"number",min:0,max:365,className:`${be} tabular-nums`,value:a.day,onChange:e=>o({day:parseInt(e.target.value,10)||0})})]}),e.jsxs("div",{children:[e.jsx("label",{className:ue,children:"Botão aponta pra"}),e.jsxs("select",{className:be,value:a.cta_target,onChange:e=>o({cta_target:e.target.value}),children:[e.jsx("option",{value:"inbox",children:"Caixa (/pt/pro/caixa)"}),e.jsx("option",{value:"pro",children:"Página Pro (/pt/pro)"})]})]})]}),e.jsxs("div",{className:"mb-3",children:[e.jsx("label",{className:ue,children:"Assunto / título"}),e.jsx("input",{className:be,value:a.subject,placeholder:"{nome}, ...",onChange:e=>o({subject:e.target.value})})]}),e.jsxs("div",{className:"mb-3",children:[e.jsxs("label",{className:ue,children:["Corpo (HTML permitido — ","<strong>",", ","<br/>",", ","<em>",")"]}),e.jsx("textarea",{className:`${be} min-h-[120px] font-mono text-xs leading-relaxed`,value:a.lead,onChange:e=>o({lead:e.target.value})})]}),e.jsxs("div",{className:"mb-3",children:[e.jsx("label",{className:ue,children:"Rótulo do botão (CTA)"}),e.jsx("input",{className:be,value:a.cta_label,placeholder:"Abrir minha caixa →",onChange:e=>o({cta_label:e.target.value})})]}),e.jsxs("div",{className:"flex items-center justify-between gap-3 flex-wrap",children:[e.jsxs("label",{className:"inline-flex items-center gap-1.5 text-sm text-slate-600 dar
1k:text-slate-300 cursor-pointer select-none",children:[e.jsx("input",{type:"checkbox",checked:a.enabled,onChange:e=>o({enabled:e.target.checked}),className:"accent-violet-600"})," etapa ativa (enviando)"]}),e.jsxs("div",{className:"flex items-center gap-2",children:[d&&e.jsx("span",{className:"text-xs text-rose-600 dark:text-rose-400",children:d}),e.jsxs("button",{onClick:l,disabled:r,className:"inline-flex items-center gap-1 px-3 py-1.5 rounded-lg text-sm bg-slate-100 hover:bg-slate-200 dark:bg-slate-800 dark:hover:bg-slate-700 text-slate-700 dark:text-slate-200 disabled:opacity-50",children:[e.jsx(g,{className:"w-4 h-4"})," cancelar"]}),e.jsxs("button",{onClick:s,disabled:r,className:"inline-flex items-center gap-1.5 px-4 py-1.5 rounded-lg text-sm bg-violet-600 hover:bg-violet-700 text-white font-medium disabled:opacity-50",children:[r?e.jsx(i,{className:"w-4 h-4 animate-spin"}):e.jsx(w,{className:"w-4 h-4"})," salvar"]})]})]})]})},je={critica:"bg-rose-100 text-rose-700 dark:bg-rose-900/30 dark:text-rose-300",alta:"bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-300",media:"bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300",baixa:"bg-slate-100 text-slate-600 dark:bg-slate-700 dark:text-slate-300"},ve=()=>{const[a,t]=s.useState(null),[l,r]=s.useState(null),[i,d]=s.useState(!0),[n,o]=s.useState("open");return s.useEffect(()=>{(async e=>{d(!0),r(null);try{const a=await fetch(`/api/admin/support?state=${e}&limit=100`);if(!a.ok)throw new Error(`HTTP ${a.status}`);t(await a.json())}catch(a){r(a instanceof Error?a.message:"erro")}finally{d(!1)}})(n)},[n]),e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx("h2",{className:"text-lg font-semibold text-slate-900 dark:text-white",children:"🎫 Chamados de suporte"}),a&&e.jsxs("span",{className:"text-sm text-slate-500 dark:text-slate-400",children:[a.openCount," abertos · ",e.jsxs("span",{className:"text-rose-600 dar
1k:text-rose-400",children:[a.awaitingFirstResponse," sem 1ª resposta"]})]}),e.jsx("div",{className:"ml-auto flex gap-1",children:["open","all","closed"].map(a=>e.jsx("button",{onClick:()=>o(a),className:"px-2.5 py-1 rounded text-xs font-medium "+(n===a?"bg-blue-600 text-white":"bg-slate-100 dark:bg-slate-800 text-slate-600 dark:text-slate-300"),children:"open"===a?"Abertos":"closed"===a?"Fechados":"Todos"},a))})]}),i&&e.jsx("p",{className:"text-sm text-slate-500",children:"Carregando…"}),l&&e.jsxs("p",{className:"text-sm text-rose-600 dark:text-rose-400",children:["Erro: ",l]}),"no_github_token"===(null==a?void 0:a.note)&&e.jsx("p",{className:"text-sm text-amber-600",children:"GITHUB_TOKEN não configurado no deploy."}),a&&!i&&e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"text-left text-slate-500 dark:text-slate-400 border-b border-slate-200 dark:border-slate-700",children:[e.jsx("th",{className:"py-2 pr-3 font-medium",children:"Chamado"}),e.jsx("th",{className:"py-2 pr-3 font-medium",children:"Categoria"}),e.jsx("th",{className:"py-2 pr-3 font-medium",children:"Prioridade"}),e.jsx("th",{className:"py-2 pr-3 font-medium",children:"Status"}),e.jsx("th",{className:"py-2 pr-3 font-medium",children:"1ª resp."}),e.jsx("th",{className:"py-2 font-medium",children:"Aberto"})]})}),e.jsxs("tbody",{children:[a.tickets.map(a=>e.jsxs("tr",{className:"border-b border-slate-100 dark:border-slate-800",children:[e.jsxs("td",{className:"py-2 pr-3",children:[e.jsx("a",{href:a.url,target:"_blank",rel:"noreferrer",className:"text-blue-600 dark:text-blue-400 hover:underline",children:a.protocol||`#${a.number}`}),e.jsx("span",{className:"block text-xs text-slate-500 truncate max-w-[280px]",children:a.title})]}),e.jsx("td",{className:"py-2 pr-3 text-slate-700 dark:text-slate-300",children:a.category}),e.jsx("td",{className:"py-2 pr-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-xs font-medium ${je[a.priority]||je.media}`,children:a.priority})}),e.jsx("td",{className:"py-2 pr-3",children:e.jsx("span",{className:"open"===a.state?"text-emerald-600 dark:text-emerald-400":"text-slate-400",children:"open"===a.state?"aberto":"fechado"})}),e.jsx("td",{className:"py-2 pr-3",children:a.firstResponse?"✅":"open"===a.state?"⏳":"—"}),e.jsx("td",{className:"py-2 text-slate-500 dark:text-slate-400 whitespace-nowrap",children:new Date(a.createdAt).toLocaleDateString("pt-BR")})]},a.number)),!a.tickets.length&&e.jsx("tr",{children:e.jsx("td",{colSpan:6,className:"py-4 text-center text-slate-400",children:"Nenhum chamado."})})]})]})})]})},Ne=e=>(e||0).toLocaleString("pt-BR",{style:"currency",currency:"BRL"}),ke=[{id:"today",label:"Hoje"},{id:"month",label:"Este mês"},{id:"year",label:"Este ano"},{id:"all",label:"Desde o início"},{id:"custom",label:"Personalizado"}],fe={CREDIT_CARD:"Cartão",PIX:"Pix",BOLETO:"Boleto",DEBIT_CARD:"Débito",UNDEFINED:"—"},ye={RECEIVED:{label:"Recebida",cls:"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200"},RECEIVED_IN_CASH:{label:"Recebida",cls:"bg-emerald-100 text-emerald-700 dark:bg-emerald-900/40 dark:text-emerald-200"},CONFIRMED:{label:"Confirmada",cls:"bg-blue-100 text-blue-700 dark:bg-blue-900/40 dark:text-blue-200"},PENDING:{label:"Aguardando",cls:"bg-amber-100 text-amber-700 dark:bg-amber-900/40 dark:text-amber-200"},OVERDUE:{label:"Vencida",cls:"bg-rose-100 text-rose-700 dark:bg-rose-900/40 dark:text-rose-200"},REFUNDED:{label:"Estornada",cls:"bg-slate-200 text-slate-600 dark:bg-slate-800 dark:text-slate-300"}},we=e=>e?new Date(e+"T00:00:00").toLocaleDateString("pt-BR"):"—",Se=({title:a,b:t,icon:s,accent:l,bar:r})=>e.jsxs("div",{className:"rounded-xl border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900 p-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-sm font-semibold text-slate-600 dark:text-slate-300",children:a}),e.jsx("span",{className:l,children:s})]}),e.jsx("div",{className:`mt-2 text-2xl font-bold ${l}`,children:Ne(t.value)}),e.jsxs("div",{className:"text-xs text-slate-400 dark:text-slate-500",children:[Ne(t.net)," líquido"]}
1),e.jsx("div",{className:`mt-3 h-1.5 rounded-full ${r}`}),e.jsxs("div",{className:"mt-2 flex items-center justify-between text-xs text-slate-500 dark:text-slate-400",children:[e.jsxs("span",{children:[t.clients," cliente",1===t.clients?"":"s"]}),e.jsxs("span",{children:[t.count," cobrança",1===t.count?"":"s"]})]})]}),Ce=()=>{const[a,t]=s.useState("month"),[l,r]=s.useState(""),[d,n]=s.useState(""),[c,x]=s.useState(null),[m,h]=s.useState(!0),[p,b]=s.useState(null),[u,g]=s.useState(null),j=s.useCallback(async(e,a,t)=>{h(!0),b(null);try{const s=new URLSearchParams({range:e});"custom"===e&&a&&t&&(s.set("start",a),s.set("end",t));const l=await fetch(`/api/admin/asaas-billing?${s.toString()}`,{credentials:"include"});if(403===l.status)return void b("Sem permissão (ADMIN_EMAILS).");if(!l.ok)throw new Error(`http ${l.status}`);x(await l.json())}catch(s){b(s instanceof Error?s.message:String(s))}finally{h(!1)}},[]);s.useEffect(()=>{j("month")},[j]);const v=null==c?void 0:c.summary;return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h2",{className:"text-lg font-bold text-slate-900 dark:text-white",children:"Situação das cobranças"}),e.jsxs("p",{className:"text-xs text-slate-500 dark:text-slate-400",children:["Ao vivo do Asaas · só DarkEmail · por vencimento",(null==c?void 0:c.range)?` · ${we(c.range.ge)} → ${c.range.le?we(c.range.le):"hoje"}`:""]})]}),e.jsxs("button",{type:"button",onClick:()=>j(a,l,d),className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-sm border border-slate-200 dark:border-slate-700 text-slate-600 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-slate-800",children:[e.jsx(S,{className:"w-4 h-4"})," Atualizar"]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[ke.map(s=>e.jsx("button",{type:"button",onClick:()=>function(e){t(e),"custom"!==e&&j(e)}(s.id),className:"px-3 py-1.5 rounded-lg text-sm border transition-colors "+(a===s.id?"border-violet-600 bg-violet-50 dark:bg-violet-900/30 text-violet-700 dark:text-violet-200":"border-slate-200 dark:border-slate-700 text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-200"),children:s.label},s.id)),"custom"===a&&e.jsxs("span",{className:"inline-flex items-center gap-2",children:[e.jsx("input",{type:"date",value:l,onChange:e=>r(e.target.value),className:"px-2 py-1.5 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900 text-sm text-slate-700 dark:text-slate-200"}),e.jsx("span",{className:"text-slate-400",children:"→"}),e.jsx("input",{type:"date",value:d,onChange:e=>n(e.target.value),className:"px-2 py-1.5 rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900 text-sm text-slate-700 dark:text-slate-200"}),e.jsx("button",{type:"button",disabled:!l||!d,onClick:()=>j("custom",l,d),className:"px-3 py-1.5 rounded-lg text-sm bg-violet-600 hover:bg-violet-700 text-white disabled:opacity-50",children:"Aplicar"})]})]}),p&&e.jsx("div",{className:"rounded-lg bg-rose-50 dark:bg-rose-900/20 border border-rose-200 dark:border-rose-800 p-3 text-sm text-rose-700 dark:text-rose-300",children:p}),m?e.jsx("div",{className:"flex justify-center py-16",children:e.jsx(i,{className:"w-7 h-7 animate-spin text-violet-500"})}):v?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3",children:[e.jsx(Se,{title:"Recebidas",b:v.received,accent:"text-emerald-600 dark:text-emerald-400",bar:"bg-emerald-500",icon:e.jsx(C,{className:"w-5 h-5"})}),e.jsx(Se,{title:"Confirmadas",b:v.confirmed,accent:"text-blue-600 dark:text-blue-400",bar:"bg-blue-500",icon:e.jsx(A,{className:"w-5 h-5"})}),e.jsx(Se,{title:"Aguardando pagamento",b:v.pending,accent:"text-amber-600 dark:text-amber-400",bar:"bg-amber-400",icon:e.jsx(_,{className:"w-5 h-5"})}),e.jsx(Se,{title:"Vencidas",b:v.overdue,accent:"text-rose-600 dar
1k:text-rose-400",bar:"bg-rose-500",icon:e.jsx(o,{className:"w-5 h-5"})})]}),e.jsxs("div",{className:"rounded-xl border border-slate-200 dark:border-slate-700 overflow-hidden",children:[e.jsxs("div",{className:"px-4 py-3 bg-slate-50 dark:bg-slate-800/50 text-sm font-semibold text-slate-700 dark:text-slate-200",children:["Cobranças (",c.charges.length,")"]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"text-xs uppercase text-slate-400 dark:text-slate-500 border-b border-slate-200 dark:border-slate-700",children:e.jsxs("tr",{children:[e.jsx("th",{className:"text-left py-2 px-3",children:"Cliente"}),e.jsx("th",{className:"text-right py-2 px-3",children:"Valor"}),e.jsx("th",{className:"text-left py-2 px-3",children:"Descrição"}),e.jsx("th",{className:"text-left py-2 px-3",children:"Forma"}),e.jsx("th",{className:"text-left py-2 px-3",children:"Vencimento"}),e.jsx("th",{className:"text-left py-2 px-3",children:"Status"}),e.jsx("th",{className:"text-right py-2 px-3",children:"Ações"})]})}),e.jsxs("tbody",{children:[c.charges.map(a=>{const t=ye[a.status]||{label:a.status,cls:"bg-slate-200 text-slate-600 dark:bg-slate-800 dark:text-slate-300"};return e.jsxs("tr",{className:"border-b border-slate-100 dark:border-slate-800",children:[e.jsxs("td",{className:"py-2 px-3",children:[e.jsx("div",{className:"font-medium text-slate-700 dark:text-slate-200",children:a.customerName||"—"}),e.jsx("div",{className:"text-xs text-slate-400",children:a.email||""})]}),e.jsxs("td",{className:"py-2 px-3 text-right",children:[e.jsx("div",{className:"font-semibold text-slate-700 dark:text-slate-200",children:Ne(a.value)}),null!=a.netValue&&e.jsxs("div",{className:"text-[11px] text-slate-400",children:[Ne(a.netValue)," líq."]})]}),e.jsx("td",{className:"py-2 px-3 text-slate-500 dark:text-slate-400 max-w-[220px] truncate",title:a.description,children:a.description||"—"}),e.jsx("td",{className:"py-2 px-3 text-slate-500 dark:text-slate-400",children:fe[a.billingType||"UNDEFINED"]||a.billingType}),e.jsx("td",{className:"py-2 px-3 text-slate-500 dark:text-slate-400",children:we(a.dueDate)}),e.jsx("td",{className:"py-2 px-3",children:e.jsx("span",{className:`px-2 py-0.5 rounded text-xs font-medium ${t.cls}`,children:t.label})}),e.jsx("td",{className:"py-2 px-3 text-right",children:["PENDING","OVERDUE","AWAITING_RISK_ANALYSIS"].includes(a.status)&&a.invoiceUrl?e.jsxs("button",{type:"button",onClick:()=>(async e=>{if(!u){g(e);try{const a=await fetch("/api/admin/whatsapp-dunning",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({paymentId:e})}),t=await a.json().catch(()=>({}));a.ok?alert("Cobrança enviada no WhatsApp ✅"):alert(`Não deu pra enviar: ${t.message||t.error||a.status}`)}catch(a){alert(`Falha ao enviar: ${a instanceof Error?a.message:String(a)}`)}finally{g(null)}}})(a.id),disabled:u===a.id,title:"Enviar cobrança no WhatsApp",className:"inline-flex items-center gap-1 px-2.5 py-1 rounded-lg bg-emerald-600 hover:bg-emerald-700 text-white text-xs font-semibold disabled:opacity-50",children:[u===a.id?e.jsx(i,{className:"w-3.5 h-3.5 animate-spin"}):e.jsx(E,{className:"w-3.5 h-3.5"}),"WhatsApp"]}):null})]},a.id)}),0===c.charges.length&&e.jsx("tr",{children:e.jsx("td",{colSpan:7,className:"py-8 text-center text-slate-400",children:"Nenhuma cobrança DarkEmail no período."})})]})]})})]})]}):null]})};async function Ae(e,a={}){const t=await fetch("/api/admin/whatsapp-settings",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({action:e,...a})}),s=await t.json().catch(()=>({}));if(!t.ok)throw new Error(s.message||s.error||`HTTP ${t.status}`);return s}const _e=()=>{const[a,t]=s.useState(null),[l,r]=s.useState(""),[d,n]=s.useState(null),[o,c]=s.useState(null),[x,m]=s.useState(null),[h,p]=s.useState(null),[b,g]=s.useState(""),[j,v]=s.useState(""),[k,f]=s.useState(""),[y,w]=s.useState(null),[S,C]=s.useState(!1),A=async()=>{try{const e=await fetch("/api/admin/whatsapp-settings",{credentials:"include"});if(403===e.status)return p({kind:"err",text:"Sem permissão (ADMIN_EMAILS)."}),null;const a=await e.json();return t(a),a}catch(e){return p({kind:"err",text:e instanceof Error?e.message:String(e)}),null}};s.useEffect(()=>{(async()=>{const e=await A();if(null==e?void 0:e.hasApiKey)try{const a=await Ae("list-instances");n(a.instances||[]);const t=(a.instances||[]).find(a=>a.id===e.instanceId);t&&c(t)}catch(a){}})()},[]);const _=async(e,a)=>{m(e),p(null);try{await a()}catch(t){p({kind:"err",text:t instanceof Error?t.message:String(t)})}finally{m(null)}};s.useEffect(()=>{if(!y||y.connected)return;let e=!0;const a=async()=>{try{const t=await Ae("instance-qr",{instanceId:y.instanceId});if(!e)return;if(w(e=>{var a;return e?{...e,base64:null!=(a=t.base64)?a:e.base64,connected:!!t.connected}:e}),t.connected){p({kind:"ok",text:'WhatsApp conectado ✅ — clique em "Salvar configuração" pra usar esta instância n
1o envio.'}),v(""),f("");try{const e=await Ae("list-instances");n(e.instances||[]);const a=(e.instances||[]).find(e=>e.id===y.instanceId);a&&c(a)}catch(a){}C(!1),w(null),await A()}}catch(a){}};a();const t=setInterval(a,4e3);return()=>{e=!1,clearInterval(t)}},[null==y?void 0:y.instanceId,null==y?void 0:y.connected]);const I="rounded-xl border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900 p-5",D="inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-semibold disabled:opacity-50";return e.jsxs("div",{className:"space-y-5",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(E,{className:"w-5 h-5 text-emerald-500"}),e.jsx("h2",{className:"text-lg font-bold text-slate-900 dark:text-white",children:"Integração WhatsApp (SimplesZap)"}),(null==a?void 0:a.configured)&&e.jsxs("span",{className:"inline-flex items-center gap-1 px-2 py-0.5 rounded-full bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-300 text-xs font-semibold",children:[e.jsx(u,{className:"w-3 h-3"})," Conectado"]})]}),h&&e.jsx("div",{className:"text-sm rounded-lg px-4 py-2.5 "+("ok"===h.kind?"bg-emerald-100 dark:bg-emerald-900/30 text-emerald-800 dark:text-emerald-200":"bg-rose-100 dark:bg-rose-900/30 text-rose-800 dark:text-rose-200"),children:h.text}),e.jsxs("div",{className:I,children:[e.jsx("h3",{className:"font-semibold text-slate-800 dark:text-slate-100 mb-1",children:"1. Chave de API do SimplesZap"}),e.jsxs("p",{className:"text-sm text-slate-500 dark:text-slate-400 mb-3",children:["Crie a conta e gere uma chave no painel do SimplesZap (deixe todos os escopos marcados — precisamos de ",e.jsx("code",{children:"messages:send"}),", ",e.jsx("code",{children:"instances:read"}),", ",e.jsx("code",{children:"instances:create"})," e ",e.jsx("code",{children:"instances:write"})," pra enviar e conectar contas), depois cole aqui."," ",e.jsxs("a",{href:"https://app.simpleszap.com/dashboard/api-keys",target:"_blank",rel:"noopener noreferrer",className:"inline-flex items-center gap-1 text-violet-600 dark:text-violet-400 hover:underline",children:["Abrir SimplesZap ",e.jsx($,{className:"w-3 h-3"})]})]}),(null==a?void 0:a.hasApiKey)&&e.jsxs("p",{className:"text-xs text-slate-500 dark:text-slate-400 mb-2",children:["Chave atual: ",e.jsx("code",{children:a.apiKeyMasked})," (deixe em branco pra manter)"]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("input",{type:"password",value:l,onChange:e=>r(e.target.value),placeholder:"sk_...",className:"flex-1 min-w-[240px] px-3 py-2 rounded-lg border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-800 text-slate-900 dark:text-white text-sm"}),e.jsxs("button",{onClick:()=>_("list",async()=>{var e;const t=await Ae("list-instances",l?{api_key:l}:{});n(t.instances||[]);const s=(t.instances||[]).find(e=>e.id===(null==a?void 0:a.instanceId));s&&!o&&c(s),(null==(e=t.instances)?void 0:e.length)||p({kind:"err",text:"Nenhuma instância encontrada nessa conta."})}),disabled:"list"===x,className:`${D} bg-violet-600 hover:bg-violet-700 text-white`,children:["list"===x?e.jsx(i,{className:"w-4 h-4 animate-spin"}):null," Listar instâncias"]})]})]}),d&&e.jsxs("div",{className:I,children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 mb-3",children:[e.jsx("h3",{className:"font-semibold text-slate-800 dark:text-slate-100",children:"2. Instância de envio"}),e.jsxs("button",{type:"button",onClick:()=>C(e=>!e),className:"inline-flex items-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-semibold bg-slate-100 dark:bg-slate-800 text-slate-700 dark:text-slate-200 hover:bg-slate-200 dark:hover:bg-slate-700",children:[e.jsx(N,{className:"w-3.5 h-3.5"})," ",S?"Cancelar":"Conectar nova conta"]})]}),0===d.length?e.jsx("p",{className:"text-sm text-slate-500 dark:text-slate-400",children:'Nenhuma instância nessa conta ainda — use "Conectar nova conta" pra criar a primeira.'}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"space-y-2",children:d.map(t=>e.jsxs("label",{className:"flex items-center gap-2.5 text-sm cursor-pointer",children:[e.jsx("input",{type:"radio",name:"inst",className:"accent-violet-600",checked:(null==o?void 0:o.id)===t.id,onChange:()=>c(t)}),e.jsx("span",{className:"font-medium text-slate-800 dark:text-slate-100",children:t.name}),e.jsxs("span",{className:"text-xs text-slate-400",children:["· ",t.status,t.phoneNumber?` · ${t.phoneNumber}`:""]}),(null==a?void 0:a.instanceId)===t.id&&e.jsx("span",{className:"text-[10px] font-bold uppercase tracking-wide text-emerald-600 dark:text-emerald-400",children:"· em uso"})]},t.id))}),e.jsxs("button",{onClick:()=>_("save",async()=>{o?(await Ae("save",{...l?{api_key:l}:{},instance_id:o.id,instance_name:o.name}),r(""),p({kind:"ok",text:"Configuração salva."}),await A()):p({kind:"err",text:"Escolha uma instância antes de salvar."})}),disabled:"save"===x||!o||o.id===(null==a?void 0:a.instanceId),className:`${D} mt-4 bg-emerald-600 hover:bg-emerald-700 text-white`,children:["save"===x?e.jsx(i,{className:"w-4 h-4 animate-spin"}):e.jsx(u,{className:"w-4 h-4"})," Salvar configuração"]})]}),S&&e.jsxs("div",{className:"mt-5 pt-5 border-t border-slate-200 dark:border-slate-700",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(R,{className:"w-4 h-4 text-violet-500"}),e.jsx("h4",{className:"font-semibold text-slate-800 dark:text-slate-100",children:"Conectar uma nova conta"})]}),e.jsxs("p",{className:"text-sm text-slate-500 dark:text-slate-400 mb-3",children:["Informe nome + número e escaneie o QR (WhatsApp → Aparelhos conectados → Conectar aparelho). Precisa da chave com escopo ",e.jsx("code",{children:"instances:create"}),"."]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("input",{value:j,onChange:e=>v(e.target.value),placeholder:"Nome (ex.: Suporte DarkEmail)",className:"flex-1 min-w-[200px] px-3 py-2 rounded-lg border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-800 text-slate-900 dark:text-white text-sm"}),e.jsx("input",{value:k,onChange:e=>f(e.target.value),placeholder:"Número (ex.: 5561999999999)",className:"flex-1 min-w-[200px] px-3 py-2 rounded-lg border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-800 text-slate-900 dark:text-white text-sm"}),e.jsxs("button",{onClick:()=>_("create",async()=>
1{if(!j.trim()||!k.trim())return void p({kind:"err",text:"Informe nome e número (ex.: 5561999999999)."});const e=await Ae("create-instance",{name:j.trim(),phoneNumber:k.trim()});w({instanceId:e.instanceId,base64:null,connected:!1})}),disabled:"create"===x,className:`${D} bg-violet-600 hover:bg-violet-700 text-white`,children:["create"===x?e.jsx(i,{className:"w-4 h-4 animate-spin"}):e.jsx(N,{className:"w-4 h-4"})," Criar e conectar"]})]}),y&&e.jsx("div",{className:"mt-4 flex flex-col items-center gap-2 text-center",children:y.base64?e.jsxs(e.Fragment,{children:[e.jsx("img",{src:y.base64.startsWith("data:")?y.base64:`data:image/png;base64,${y.base64}`,alt:"QR de conexão do WhatsApp",width:220,height:220,className:"rounded-lg border border-slate-200 dark:border-slate-700 bg-white"}),e.jsxs("div",{className:"text-sm text-slate-500 dark:text-slate-400 max-w-sm",children:["Abra o WhatsApp no celular → ",e.jsx("strong",{children:"Aparelhos conectados"})," → ",e.jsx("strong",{children:"Conectar aparelho"})," e escaneie. Aguardando a conexão…"]})]}):e.jsxs("div",{className:"inline-flex items-center gap-2 text-sm text-slate-500",children:[e.jsx(i,{className:"w-4 h-4 animate-spin"})," Gerando QR…"]})})]})]}),e.jsxs("div",{className:I,children:[e.jsx("h3",{className:"font-semibold text-slate-800 dark:text-slate-100 mb-1",children:"3. Webhook (status de entrega + respostas)"}),e.jsxs("p",{className:"text-sm text-slate-500 dark:text-slate-400 mb-3",children:["Registra ",e.jsx("code",{className:"break-all",children:null==a?void 0:a.webhookUrl})," no SimplesZap pra recebermos entrega e respostas do cliente.",(null==a?void 0:a.webhookConfigured)&&e.jsx("span",{className:"text-emerald-600 dark:text-emerald-400 font-semibold",children:" · já configurado"})]}),e.jsxs("button",{onClick:()=>_("webhook",async()=>{await Ae("configure-webhook"),p({kind:"ok",text:"Webhook configurado no SimplesZap."}),await A()}),disabled:"webhook"===x||!(null==a?void 0:a.configured),className:`${D} bg-slate-700 hover:bg-slate-800 text-white`,children:["webhook"===x?e.jsx(i,{className:"w-4 h-4 animate-spin"}):e.jsx(P,{className:"w-4 h-4"})," Configurar webhook"]})]}),e.jsxs("div",{className:I,children:[e.jsx("h3",{className:"font-semibold text-slate-800 dark:text-slate-100 mb-3",children:"4. Testar envio"}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsx("input",{type:"tel",value:b,onChange:e=>g(e.target.value),placeholder:"Ex.: 5561999999999",className:"flex-1 min-w-[240px] px-3 py-2 rounded-lg border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-800 text-slate-900 dark:text-white text-sm"}),e.jsxs("button",{onClick:()=>_("test",async()=>{b?(await Ae("test",{to:b}),p({kind:"ok",text:"Mensagem de teste enfileirada ✅"})):p({kind:"err",text:"Informe um número pra teste."})}),disabled:"test"===x||!(null==a?void 0:a.configured),className:`${D} bg-violet-600 hover:bg-violet-700 text-white`,children:["test"===x?e.jsx(i,{className:"w-4 h-4 animate-spin"}):e.jsx(T,{className:"w-4 h-4"})," Enviar teste"]})]})]})]})},Ee=[7,30,90],$e=({titulo:a,valor:t,nota:s,alerta:l})=>e.jsxs("div",{className:"rounded-lg border p-3 "+(l?"border-amber-300 bg-amber-50 dark:border-amber-800 dark:bg-amber-900/20":"border-slate-200 bg-slate-50 dark:border-slate-700 dark:bg-slate-800/50"),children:[e.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-400",children:a}),e.jsx("div",{className:"text-xl font-semibold text-slate-900 dark:text-white tabular-nums",children:t}),s&&e.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-400 mt-0.5",children:s})]}),Re=()=>{const[a,t]=s.useState(null),[l,r]=s.useState(null),[d,n]=s.useState(!0),[c,x]=s.useState(30),[m,h]=s.useState(""),[p,b]=s.useState(""),[u,g]=s.useState(""),[j,v]=s.useState(!1);s.useEffect(()=>{let e=!1;return(async()=>{n(!0),r(null);try{const a=new URLSearchParams({dias:String(c)});m&&a.set("topic",m),u&&a.set("q",u),j&&a.set("fallback","1");const s=await fetch(`/api/admin/ai-questions?${a}`,{credentials:"include"});if(!s.ok)throw new Error(`HTTP ${s.status}`);const l=await s.json();e||t(l)}catch(a){e||r(a instanceof Error?a.message:"erro")}finally{e||n(!1)}})(),()=>{e=!0}},[c,m,u,j]);const N=null==a?void 0:a.resumo;return e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-3 mb-4",children:[e.jsx("h2",{className:"text-lg font-semibold text-slate-900 dark:text-white",children:"🤖 Perguntas à IA"}),d&&e.jsx(i,{className:"w-4 h-4 animate-spin text-slate-400","aria-label":"carregando"}),e.jsxs("div",{className:"ml-auto flex items-center gap-1",children:[Ee.map(a=>e.jsxs("button",{type:"button",onClick:()=>x(a),className:"px-2.5 py-1 text-xs rounded-md border transition-colors "+(c===a?"border-violet-500 bg-violet-50 text-violet-700 dark:bg-violet-900/30 dark:text-violet-300":"border-slate-200 text-slate-600 dar
1k:border-slate-700 dark:text-slate-400"),children:[a,"d"]},a)),e.jsx("button",{type:"button",onClick:()=>g(e=>e),className:"ml-1 p-1.5 rounded-md border border-slate-200 dark:border-slate-700 text-slate-500","aria-label":"Atualizar",children:e.jsx(S,{className:"w-3.5 h-3.5"})})]})]}),l&&e.jsxs("div",{className:"mb-4 rounded-lg border border-rose-200 bg-rose-50 p-3 text-sm text-rose-700 dark:border-rose-800 dark:bg-rose-900/20 dark:text-rose-300",children:["Erro ao carregar: ",l]}),N&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-5 gap-3 mb-5",children:[e.jsx($e,{titulo:"Perguntas",valor:String(N.total),nota:`últimos ${null==a?void 0:a.periodo.dias}d`}),e.jsx($e,{titulo:"Resolvido sem chamado",valor:`${N.deflexao}%`,nota:`${N.chamados.total} viraram chamado`}),e.jsx($e,{titulo:"IA fora do ar",valor:`${N.fallback.pct}%`,nota:`${N.fallback.total} respostas genéricas`,alerta:N.fallback.pct>=5}),e.jsx($e,{titulo:"Achou útil",valor:N.feedback.uteis+N.feedback.inuteis?`${N.feedback.pct}%`:"—",nota:`${N.feedback.uteis} sim · ${N.feedback.inuteis} não`}),e.jsx($e,{titulo:"Latência (mediana)",valor:N.latenciaMedianaMs?`${(N.latenciaMedianaMs/1e3).toFixed(1)}s`:"—"})]}),N.fallback.pct>=5&&e.jsxs("div",{className:"mb-5 flex items-start gap-2 rounded-lg border border-amber-300 bg-amber-50 p-3 text-sm text-amber-800 dark:border-amber-800 dark:bg-amber-900/20 dark:text-amber-200",children:[e.jsx(o,{className:"w-4 h-4 mt-0.5 shrink-0"}),e.jsxs("span",{children:[N.fallback.pct,"% das perguntas caíram na resposta genérica — o provedor de IA esteve fora. Já aconteceu em silêncio antes; conferir o modelo configurado."]})]}),e.jsxs("div",{className:"mb-5",children:[e.jsx("div",{className:"text-sm font-medium text-slate-700 dark:text-slate-300 mb-2",children:"Por assunto"}),e.jsxs("div",{className:"space-y-1.5",children:[N.porAssunto.map(a=>e.jsxs("button",{type:"button",onClick:()=>h(m===a.topico?"":a.topico),className:"w-full flex items-center gap-3 text-left text-sm rounded-md px-2 py-1.5 transition-colors "+(m===a.topico?"bg-violet-50 dark:bg-violet-900/30":"hover:bg-slate-50 dark:hover:bg-slate-800/50"),children:[e.jsx("span",{className:"w-44 shrink-0 truncate text-slate-700 dark:text-slate-300",children:a.rotulo}),e.jsx("span",{className:"flex-1 h-2 rounded-full bg-slate-100 dark:bg-slate-800 overflow-hidden",children:e.jsx("span",{className:"block h-full bg-violet-500",style:{width:`${a.pct}%`}})}),e.jsxs("span",{className:"w-24 text-right tabular-nums text-slate-600 dark:text-slate-400",children:[a.total," · ",a.pct,"%"]}),e.jsxs("span",{className:"w-28 text-right tabular-nums text-xs text-slate-400",children:[a.chamados," chamado",1===a.chamados?"":"s"]})]},a.topico)),!N.porAssunto.length&&e.jsx("div",{className:"text-sm text-slate-500 dark:text-slate-400",children:"Nenhuma pergunta no período."})]})]}),N.recorrentes.length>0&&e.jsxs("div",{className:"mb-5",children:[e.jsxs("div",{className:"text-sm font-medium text-slate-700 dark:text-slate-300 mb-2",children:["Mais repetidas ",e.jsx("span",{className:"font-normal text-slate-400",children:"— cada uma é um item de FAQ faltando"})]}),e.jsx("div",{className:"space-y-1",children:N.recorrentes.map(a=>e.jsxs("div",{className:"flex items-start gap-3 text-sm",children:[e.jsxs("span",{className:"w-8 shrink-0 text-right tabular-nums text-slate-400",children:[a.total,"×"]}),e.jsx("span",{className:"text-slate-700 dark:text-slate-300",children:a.exemplo})]},a.exemplo))})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2 mb-3",children:[e.jsxs("div",{className:"relative flex-1 min-w-[200px]",children:[e.jsx(I,{className:"absolute left-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-slate-400"}),e.jsx("input",{type:"search",value:p,onChange:e=>b(e.target.value),onKeyDown:e=>{"Enter"===e.key&&g(p)},placeholder:"Buscar na pergunta (Enter)",className:"w-full pl-8 pr-3 py-1.5 text-sm rounded-md border border-slate-200 bg-white text-slate-900 dark:border-slate-700 dark:bg-slate-800 dark:text-white"})]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-sm text-slate-600 dar
1k:text-slate-400",children:[e.jsx("input",{type:"checkbox",checked:j,onChange:e=>v(e.target.checked)}),"só falhas da IA"]}),(m||u||j)&&e.jsx("button",{type:"button",onClick:()=>{h(""),b(""),g(""),v(!1)},className:"text-sm text-violet-600 dark:text-violet-400",children:"limpar filtros"})]}),e.jsxs("div",{className:"divide-y divide-slate-100 dark:divide-slate-800",children:[((null==a?void 0:a.perguntas)||[]).map(a=>e.jsxs("div",{className:"py-2.5 text-sm",children:[e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx("span",{className:"text-slate-800 dark:text-slate-200",children:a.question}),a.is_fallback&&e.jsx("span",{className:"shrink-0 rounded px-1.5 py-0.5 text-xs bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-300",children:"IA fora"}),a.ticket_protocol&&e.jsx("span",{className:"shrink-0 rounded px-1.5 py-0.5 text-xs bg-slate-100 text-slate-600 dark:bg-slate-700 dark:text-slate-300",children:a.ticket_protocol})]}),e.jsxs("div",{className:"mt-0.5 flex flex-wrap gap-x-3 text-xs text-slate-400",children:[e.jsx("span",{children:new Date(a.created_at).toLocaleString("pt-BR")}),a.topic&&e.jsx("span",{children:a.topic}),a.plan&&e.jsx("span",{children:a.plan}),null!=a.latency_ms&&e.jsxs("span",{children:[(a.latency_ms/1e3).toFixed(1),"s"]}),!0===a.helpful&&e.jsx("span",{className:"text-emerald-500",children:"útil"}),!1===a.helpful&&e.jsx("span",{className:"text-rose-500",children:"não ajudou"})]})]},a.id)),!d&&!(null==a?void 0:a.perguntas.length)&&e.jsx("div",{className:"py-6 text-center text-sm text-slate-500 dark:text-slate-400",children:"Nenhuma pergunta com esses filtros."})]}),(null==a?void 0:a.truncado)&&e.jsx("div",{className:"mt-3 text-xs text-slate-400",children:"Mostrando as 500 mais recentes. Os números acima consideram o período inteiro."})]})},Pe=e=>e.toLocaleString("pt-BR",{style:"currency",currency:"BRL"}),Te=e=>e.toLocaleString("pt-BR"),Ie=({icon:a,label:t,value:s,sub:l,title:r})=>e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",title:r,children:[e.jsxs("div",{className:"flex items-center gap-2 text-slate-500 dark:text-slate-400 text-sm mb-2",children:[a,e.jsx("span",{children:t}),r&&e.jsx(v,{size:16,className:"ml-auto text-slate-400 cursor-help","aria-hidden":!0})]}),e.jsx("div",{className:"text-3xl font-bold text-slate-900 dark:text-white",children:s}),l&&e.jsx("div",{className:"text-xs text-slate-500 dark:text-slate-400 mt-1",children:l})]}),De=({data:a,color:t})=>{const s=Math.max(1,...a.map(e=>e.count));return e.jsx("div",{className:"flex items-end gap-0.5 h-32",children:a.map(a=>{const l=Math.max(2,a.count/s*100);return e.jsx("div",{title:`${a.date}: ${a.count}`,className:"flex-1 rounded-t transition-opacity hover:opacity-80",style:{height:`${l}%`,backgroundColor:t}},a.date)})})},Me=({target:a,onClose:t,onSaved:l})=>{const[r,d]=s.useState("pro_monthly"),[n,o]=s.useState(3),[c,x]=s.useState(!0),[m,h]=s.useState(""),[p,b]=s.useState(!1),[u,j]=s.useState(null);if(!a)return null;return e.jsx("div",{className:"fixed inset-0 z-[1100] flex items-center justify-center bg-black/50 p-4",children:e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-6 max-w-md w-full",children:[e.jsxs("div",{className:"flex items-start justify-between mb-4",children:[e.jsxs("div",{children:[e.jsx("h3",{className:"text-lg font-semibold text-slate-900 dark:text-white",children:"Conceder plano"}),e.jsxs("p",{className:"text-sm text-slate-500 dark:text-slate-400",children:[a.email," ",e.jsxs("span",{className:"text-xs",children:["(atual: ",a.plan||"free",")"]})]})]}),e.jsx("button",{type:"button",onClick:t,"aria-label":"Fechar",title:"Fechar",className:"text-slate-400 hover:text-slate-600",children:e.jsx(g,{className:"w-5 h-5"})})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"text-xs uppercase text-slate-500 dark:text-slate-400 font-semibold",children:"Plano"}),e.jsxs("select",{value:r,onChange:e=>d(e.target.value),"aria-label":"Plano a conceder",title:"Plano a conceder",className:"w-full mt-1 px-3 py-2 rounded-lg border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-800 text-slate-900 dark:text-white",children:[e.jsx("option",{value:"pro_monthly",children:"Pro · Mensal (caixa unificada + endereços ilimitados)"}),e.jsx("option",{value:"pro_yearly",children:"Pro · Anual"}),e.jsx("option",{value:"free",children:"Free (revogar acesso pago)"})]})]}),"free"!==r&&e.jsxs("div",{children:[e.jsx("label",{className:"text-xs uppercase text-slate-500 dark:text-slate-400 font-semibold",children:"Duracao"}),e.jsx("div",{className:"grid grid-cols-3 gap-2 mt-1",children:[3,6,12].map(a=>e.jsxs("button",{type:"button",onClick:()=>o(a),className:"px-3 py-2 rounded-lg border text-sm "+(n===a?"border-violet-500 bg-violet-100 dar
1k:bg-violet-900/40 text-violet-700 dark:text-violet-200 font-semibold":"border-slate-300 dark:border-slate-700 text-slate-600 dark:text-slate-300"),children:[a," meses"]},a))}),e.jsxs("p",{className:"text-xs text-slate-500 dark:text-slate-400 mt-2",children:["Acesso ate ",new Date(Date.now()+30*n*24*60*60*1e3).toLocaleDateString("pt-BR")]})]}),"free"!==r&&e.jsxs("div",{className:"rounded-lg border border-fuchsia-200 dark:border-fuchsia-900 bg-fuchsia-50/60 dark:bg-fuchsia-950/20 p-3",children:[e.jsxs("label",{className:"flex items-start gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:c,onChange:e=>x(e.target.checked),className:"mt-0.5 w-4 h-4 accent-fuchsia-600"}),e.jsxs("span",{className:"min-w-0",children:[e.jsxs("span",{className:"inline-flex items-center gap-1.5 text-sm font-semibold text-slate-900 dark:text-white",children:[e.jsx(B,{size:16,"aria-hidden":!0})," É cortesia (não pagou)"]}),e.jsxs("span",{className:"block text-xs text-slate-500 dark:text-slate-400 mt-0.5",children:["Fica separado no dashboard e ",e.jsx("strong",{children:"nunca entra no MRR"}),". Desmarque só se essa pessoa pagou de verdade por fora do gateway."]})]})]}),c&&e.jsxs("div",{className:"mt-3",children:[e.jsx("label",{htmlFor:"courtesy-note",className:"text-xs uppercase text-slate-500 dark:text-slate-400 font-semibold",children:"Quem / por quê"}),e.jsx("input",{id:"courtesy-note",type:"text",value:m,onChange:e=>h(e.target.value),maxLength:200,placeholder:"Ex: Influencer @fulano — YouTube 50k",className:"w-full mt-1 px-3 py-2 rounded-lg border border-slate-300 dark:border-slate-700 bg-white dark:bg-slate-800 text-slate-900 dark:text-white text-sm placeholder:text-slate-400"}),e.jsx("p",{className:"text-xs text-slate-500 dark:text-slate-400 mt-1",children:"Aparece na lista de cortesias — sem isso você não lembra quem é daqui a 3 meses."})]})]}),"free"===r&&e.jsx("p",{className:"text-xs text-amber-700 dark:text-amber-300 bg-amber-50 dark:bg-amber-900/20 border border-amber-200 dark:border-amber-800 rounded-lg p-2.5",children:"Revoga o acesso Pro na hora e limpa a marca de cortesia, se houver."}
1),u&&e.jsx("div",{className:"text-sm text-rose-600 dark:text-rose-400 bg-rose-50 dark:bg-rose-900/20 border border-rose-200 dark:border-rose-800 rounded p-2",children:u}),e.jsxs("div",{className:"flex gap-2 justify-end pt-2",children:[e.jsx("button",{type:"button",onClick:t,disabled:p,className:"px-4 py-2 rounded-lg border border-slate-300 dark:border-slate-700 text-slate-700 dark:text-slate-200 text-sm",children:"Cancelar"}),e.jsxs("button",{type:"button",onClick:async()=>{b(!0),j(null);try{const e=await fetch("/api/admin/user-plan",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({userId:a.id,plan:r,monthsValid:"free"===r?void 0:n,courtesy:"free"===r?void 0:c,note:"free"!==r&&c?m.trim():void 0})});if(!e.ok){const a=await e.json().catch(()=>({}));throw new Error(a.error||`HTTP ${e.status}`)}l(),t()}catch(e){j(e instanceof Error?e.message:String(e))}finally{b(!1)}},disabled:p,className:"px-4 py-2 rounded-lg bg-violet-600 hover:bg-violet-700 text-white text-sm disabled:opacity-50 inline-flex items-center gap-2",children:[p&&e.jsx(i,{className:"w-4 h-4 animate-spin"}),"Confirmar"]})]})]})]})})},Le=[{id:"overview",label:"Visão geral",Icon:W},{id:"funil",label:"Funil & Vendas",Icon:j},{id:"cobrancas",label:"Cobranças",Icon:U},{id:"marketing",label:"Marketing",Icon:h},{id:"emails",label:"E-mails",Icon:c},{id:"usuarios",label:"Usuários",Icon:V},{id:"suporte",label:"Suporte",Icon:z},{id:"perguntas",label:"Perguntas à IA",Icon:G},{id:"whatsapp",label:"WhatsApp",Icon:E}],Oe=()=>{const{user:r,loading:d}=a(),[n,o]=s.useState("overview"),[x,m]=s.useState(0),[h,p]=s.useState(""),[b,g]=s.useState(null),[j,v]=s.useState(null),[N,k]=s.useState(!0),[f,y]=s.useState(null),[w,C]=s.useState(null),[A,_]=s.useState("created_at"),[E,R]=s.useState("desc"),P=l.useCallback(async()=>{k(!0),y(null);try{const[e,a]=await Promise.all([fetch("/api/admin/dashboard",{credentials:"include"}),fetch("/api/admin/users?limit=500",{credentials:"include"})]);if(403===e.status)return void y("Sem permissao (ADMIN_EMAILS).");if(!e.ok)throw new Error(`dashboard ${e.status}`);if(!a.ok)throw new Error(`users ${a.status}`);g(await e.json()),v(await a.json())}catch(e){y(e instanceof Error?e.message:String(e))}finally{k(!1)}},[]);return s.useEffect(()=>{r&&P()},[r,P]),d?e.jsx("div",{className:"flex justify-center py-20",children:e.jsx(i,{className:"w-8 h-8 animate-spin text-violet-500"})}):r?e.jsxs(e.Fragment,{children:[e.jsx(t,{title:"Admin · DarkEmail",description:"Dashboard interno",page:"/admin",noindex:!0}),e.jsxs("div",{className:"max-w-7xl mx-auto py-8 space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold text-slate-900 dark:text-white",children:"Admin Dashboard"}),e.jsxs("p",{className:"text-sm text-slate-500 dark:text-slate-400",children:["Logado como ",r.email," ",b&&`· atualizado ${new Date(b.generatedAt).toLocaleString("pt-BR")}`]})]}),e.jsxs("button",{onClick:P,disabled:N,className:"inline-flex items-center gap-2 px-3 py-2 rounded-lg bg-violet-600 hover:bg-violet-700 text-white text-sm disabled:opacity-50",children:[N?e.jsx(i,{className:"w-4 h-4 animate-spin"}):e.jsx(S,{className:"w-4 h-4"}),"Atualizar"]})]}),e.jsx("div",{className:"flex flex-wrap gap-1 border-b border-slate-200 dark:border-slate-700 sticky top-0 bg-white dark:bg-slate-950 z-10",children:Le.map(a=>e.jsxs("button",{type:"button",onClick:()=>o(a.id),className:"inline-flex items-center gap-1.5 px-4 py-2.5 text-sm font-medium rounded-t-lg -mb-px border-b-2 transition-colors "+(n===a.id?"border-violet-600 text-violet-700 dark:text-violet-300":"border-transparent text-slate-500 dark:text-slate-400 hover:text-slate-700 dark:hover:text-slate-200"),children:[e.jsx(a.Icon,{size:16,"aria-hidden":!0}),a.label]},a.id))}),"marketing"===n&&e.jsx(re,{}),"funil"===n&&e.jsx(te,{}),"suporte"===n&&e.jsx(ve,{}),"perguntas"===n&&e.jsx(Re,{}),"cobrancas"===n&&e.jsx(Ce,{}),"whatsapp"===n&&e.jsx(_e,{}),"funil"===n&&e.jsx(ce,{}),"marketing"===n&&e.jsx(pe,{}),"emails"===n&&e.jsx(de,{}),f&&e.jsxs("div",{className:"bg-rose-50 dark:bg-rose-900/20 border border-rose-200 dark:border-rose-800 rounded-lg p-4 text-rose-700 dark:text-rose-300 text-sm",children:["Erro: ",f]}),b&&e.jsxs(e.Fragment,{children:["overview"===n&&e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-4",children:[e.jsx(Ie,{icon:e.jsx(D,{className:"w-4 h-4"}),label:"Usuarios totais",value:Te(b.users.total),sub:b.users.status?`${b.users.status.pagante} pagantes · ${b.users.status.trial} trial · ${b.users.status.legado_stripe} legado · ${b.users.status.carencia} carência`:`${b.users.breakdown.free} free · ${b.users.breakdown.pro} pro`,title:"Pagante = período ativo + assinatura Asaas. Trial e legado Stripe NÃO são pagantes."}),e.jsx(Ie,{icon:e.jsx(M,{className:"w-4 h-4"}),label:"Conversao paga",value:`${(100*b.users.conversionRate).toFixed(1)}%`,sub:`${Te(b.users.paidUsers)} pagantes reais (Asaas) / ${Te(b.users.total)} total`,title:"Só conta quem pagou de verdade via Asaas (não trial, não legado Stripe)."}),e.jsx(Ie,{icon:e.jsx(L,{className:"w-4 h-4"}),label:"MRR estimado",value:Pe(b.revenue.mrrBrl),sub:`ARR ~ ${Pe(b.revenue.arrBrl)}`,title:b.revenue.explain||"MRR = soma dos pagantes ativos no Asaas."}),e.jsx(Ie,{icon:e.jsx(c,{className:"w-4 h-4"}),label:"Emails recebidos (24h)",value:Te(b.messages.last24h),sub:`7d ${Te(b.messages.last7d)}
1 · 30d ${Te(b.messages.last30d)} · total ${Te(b.messages.total)}`})]}),"emails"===n&&b.redisStats&&e.jsxs("div",{className:"bg-violet-50 dark:bg-violet-950/30 border border-violet-200 dark:border-violet-800 rounded-xl p-5",children:[e.jsx("div",{className:"text-sm font-semibold text-violet-900 dark:text-violet-200 mb-3",children:"Contadores globais (free + pro, via Redis)"}),e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-violet-700 dark:text-violet-300",children:"Emails criados (all time)"}),e.jsx("div",{className:"text-xl font-bold text-violet-900 dark:text-violet-100",children:Te(b.redisStats.emailsCreated)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-violet-700 dark:text-violet-300",children:"Msgs recebidas (all time)"}),e.jsx("div",{className:"text-xl font-bold text-violet-900 dark:text-violet-100",children:Te(b.redisStats.messagesReceivedAllTime)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-violet-700 dark:text-violet-300",children:"Msgs na ultima hora"}),e.jsx("div",{className:"text-xl font-bold text-violet-900 dark:text-violet-100",children:Te(b.redisStats.messagesLastHour)})]})]})]}),"overview"===n&&e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",children:[e.jsx("h3",{className:"text-sm font-semibold text-slate-700 dark:text-slate-200 mb-3",children:"Signups por dia (30d)"}),e.jsx(De,{data:b.timelines.signups30d,color:"#8b5cf6"}),e.jsxs("div",{className:"text-xs text-slate-500 dark:text-slate-400 mt-2",children:["Total 30d: ",Te(b.timelines.signups30d.reduce((e,a)=>e+a.count,0))]})]}),e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",children:[e.jsx("h3",{className:"text-sm font-semibold text-slate-700 dark:text-slate-200 mb-3",children:"Emails recebidos por dia (30d)"}),e.jsx(De,{data:b.timelines.emails30d,color:"#ec4899"}),e.jsxs("div",{className:"text-xs text-slate-500 dark:text-slate-400 mt-2",children:["Total 30d: ",Te(b.timelines.emails30d.reduce((e,a)=>e+a.count,0))]})]})]}),"marketing"===n&&e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"bg-amber-50 dark:bg-amber-950/30 border border-amber-200 dark:border-amber-800 rounded-xl p-5",children:[e.jsx("h3",{className:"text-sm font-semibold text-amber-900 dark:text-amber-200 mb-2",children:"Vercel Analytics"}),e.jsx("p",{className:"text-sm text-amber-800 dark:text-amber-300 mb-3",children:"Geolocalizacao do site (paises, cidades, devices, referrers). Web Analytics ja ativo."}),e.jsxs("a",{href:"https://vercel.com/inaels-projects-f2dcb9b7/darkemail/analytics",target:"_blank",rel:"noopener",className:"inline-flex items-center gap-2 px-3 py-2 rounded-lg bg-amber-600 hover:bg-amber-700 text-white text-sm",children:["Abrir Vercel Analytics ",e.jsx($,{className:"w-4 h-4"})]})]}),e.jsxs("div",{className:"bg-sky-50 dark:bg-sky-950/30 border border-sky-200 dark:border-sky-800 rounded-xl p-5",children:[e.jsx("h3",{className:"text-sm font-semibold text-sky-900 dark:text-sky-200 mb-2",children:"Google Analytics"}),e.jsx("p",{className:"text-sm text-sky-800 dark:text-sky-300 mb-3",children:"Eventos do GA4 (site + extensao Chrome): instalacoes, geracoes de email, conversoes Pro."}),e.jsxs("a",{href:"https://analytics.google.com/analytics/web/#/a395785933p539182332/reports/intelligenthome",target:"_blank",rel:"noopener",className:"inline-flex items-center gap-2 px-3 py-2 rounded-lg bg-sky-600 hover:bg-sky-700 text-white text-sm",children:["Abrir Google Analytics ",e.jsx($,{className:"w-4 h-4"})]})]}),e.jsxs("div",{className:"bg-emerald-50 dark:bg-emerald-950/30 border border-emerald-200 dark:border-emerald-800 rounded-xl p-5",children:[e.jsx("h3",{className:"text-sm font-semibold text-emerald-900 dark:text-emerald-200 mb-2",children:"Search Console"}),e.jsx("p",{className:"text-sm text-emerald-800 dark:text-emerald-300 mb-3",children:"Performance no Google (queries, cliques, posicao media), indexacao de paginas e Core Web Vitals. Login: [email protected]."}),e.jsxs("a",{href:"https://search.google.com/search-console?resource_id=https%3A%2F%2Fwww.darkemail.school%2F&hl=pt",target:"_blank",rel:"noopener",className:"inline-flex items-center gap-2 px-3 py-2 rounded-lg bg-emerald-600 hover:bg-emerald-700 text-white text-sm",children:["Abrir Search Console ",e.jsx($,{className:"w-4 h-4"})]})]})]}),"emails"===n&&e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",children:[e.jsx("h3",{className:"text-sm font-semibold text-slate-700 dark:text-slate-200 mb-3",children:"Top dominios remetentes (30d)"}),e.jsxs("div",{className:"space-y-1",children:[0===b.topSenderDomains.length&&e.jsx("div",{className:"text-sm text-slate-500",children:"Sem dados ainda."}),b.topSenderDomains.map((a,t)=>{var s;const l=(null==(s=b.topSenderDomains[0])?void 0:s.count)||1;return e.jsxs("div",{className:"flex items-center gap-3 text-sm",children:[e.jsxs("div",{className:"w-6 text-slate-400 tabular-nums",children:[t+1,"."]}),e.jsx("div",{className:"w-48 font-mono text-slate-700 dark:text-slate-300 truncate",children:a.domain}
1),e.jsx("div",{className:"flex-1 h-2 bg-slate-100 dark:bg-slate-800 rounded overflow-hidden",children:e.jsx("div",{className:"h-full bg-violet-500",style:{width:a.count/l*100+"%"}})}),e.jsx("div",{className:"w-16 text-right tabular-nums text-slate-600 dark:text-slate-400",children:Te(a.count)})]},a.domain)})]})]}),"usuarios"===n&&j&&(()=>{const a="asc"===E?1:-1,t=h.trim().toLowerCase(),s=[...t?j.users.filter(e=>(e.email||"").toLowerCase().includes(t)):j.users].sort((e,t)=>{var s,l;if("created_at"===A)return(new Date(e.created_at||0).getTime()-new Date(t.created_at||0).getTime())*a;const r=null!=(s=e[A])?s:"",i=null!=(l=t[A])?l:"";return String(r).localeCompare(String(i),"pt-BR")*a}),l=Math.max(1,Math.ceil(s.length/25)),r=Math.min(x,l-1),i=s.slice(25*r,25*r+25);return e.jsxs("div",{className:"bg-white dark:bg-slate-900 border border-slate-200 dark:border-slate-700 rounded-xl p-5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3 mb-3 flex-wrap",children:[e.jsxs("h3",{className:"text-sm font-semibold text-slate-700 dark:text-slate-200",children:["Usuários — total ",Te(j.total),t?` · ${s.length} no filtro`:""]}),e.jsx("input",{type:"search",value:h,onChange:e=>{p(e.target.value),m(0)},placeholder:"Buscar por e-mail…",className:"px-3 py-1.5 text-sm border border-slate-300 dark:border-slate-700 rounded-lg bg-white dark:bg-slate-800 text-slate-900 dark:text-white w-full sm:w-64"})]}),e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"text-xs text-slate-500 dark:text-slate-400 uppercase border-b border-slate-200 dark:border-slate-700",children:e.jsxs("tr",{children:[[["email","Email"],["plan","Plano"],["created_at","Criado"],["stripe_customer_id","Stripe"]].map(([a,t])=>e.jsx("th",{className:"text-left py-2 px-2",children:e.jsxs("button",{type:"button",onClick:()=>(e=>{A===e?R(e=>"asc"===e?"desc":"asc"):(_(e),R("created_at"===e?"desc":"asc"))})(a),className:"inline-flex items-center gap-1 uppercase cursor-pointer hover:text-slate-700 dark:hover:text-slate-200",children:[t,A===a?"asc"===E?e.jsx(O,{size:14,"aria-hidden":!0}):e.jsx(F,{size:14,"aria-hidden":!0}):null]})},a)),e.jsx("th",{className:"text-right py-2 px-2",children:"Acoes"})]})}),e.jsxs("tbody",{children:[i.map(a=>{var t;return e.jsxs("tr",{className:"border-b border-slate-100 dark:border-slate-800",children:[e.jsx("td",{className:"py-2 px-2 text-slate-700 dark:text-slate-200",children:a.email}),e.jsx("td",{className:"py-2 px-2",children:e.jsx("span",{className:"px-2 py-0.5 rounded text-xs font-mono "+("free"===a.plan?"bg-slate-100 dark:bg-slate-800 text-slate-600":(null==(t=a.plan)?void 0:t.startsWith("pro_solo"))?"bg-fuchsia-100 dark:bg-fuchsia-900/40 text-fuchsia-700 dark:text-fuchsia-200":"bg-violet-100 dark:bg-violet-900/40 text-violet-700 dark:text-violet-200"),children:a.plan||"free"})}),e.jsx("td",{className:"py-2 px-2 text-slate-500 text-xs",children:a.created_at?new Date(a.created_at).toLocaleDateString("pt-BR"):"—"}),e.jsx("td",{className:"py-2 px-2 text-slate-400 text-xs font-mono",children:a.stripe_customer_id?a.stripe_customer_id.slice(0,14)+"…":"—"}),e.jsxs("td",{className:"py-2 px-2 text-right whitespace-nowrap",children:[e.jsxs("button",{type:"button",onClick:()=>(async(e,a)=>{try{if(!(await fetch("/api/admin/api-access",{method:"POST",headers:{"Content-Type":"application/json"},credentials:"include",body:JSON.stringify({userId:e,enabled:a})})).ok)return void alert("Falha ao alterar acesso à API.");await P()}catch(t){alert("Falha ao alterar acesso à API.")}})(a.id,!a.api_enabled),className:"inline-flex items-center gap-1 px-2 py-1 rounded text-xs mr-1 "+(a.api_enabled?"bg-emerald-100 hover:bg-emerald-200 dark:bg-emerald-900/40 dark:hover:bg-emerald-900/60 text-emerald-700 dark:text-emerald-200":a.api_requested_at?"bg-amber-100 hover:bg-amber-200 dark:bg-amber-900/40 dark:hover:bg-amber-900/60 text-amber-700 dark:text-amber-200":"bg-slate-100 hover:bg-slate-200 dark:bg-slate-800 dark:hover:bg-slate-700 text-slate-500 dark:text-slate-300"),title:a.api_enabled?"API liberada — clique pra revogar":a.api_requested_at?"API solicitada — clique pra liberar":"Liberar acesso à API",children:[e.jsx(q,{className:"w-3 h-3"}),a.api_enabled?e.jsxs(e.Fragment,{children:["API ",e.jsx(u,{size:12,"aria-hidden":!0})]}):a.api_requested_at?"API !":"API"]}),e.jsxs("button",{type:"button",onClick:()=>C({id:a.id,email:a.email,plan:a.plan}),className:"inline-flex items-center gap-1 px-2 py-1 rounded text-xs bg-violet-100 hover:bg-violet-200 dark:bg-violet-900/40 dark:hover:bg-violet-900/60 text-violet-700 dark:text-violet-200",title:"Conceder plano manualmente",children:[e.jsx(B,{className:"w-3 h-3"}),"Conceder"]})]})]},a.id)}),0===i.length&&e.jsx("tr",{children:e.jsx("td",{colSpan:5,className:"py-6 text-center text-slate-400",children:"Nenhum usuário encontrado."})})]})]})}),e.jsxs("div",{className:"flex items-center justify-between mt-3 text-sm text-slate-500 dark:text-slate-400",children:[e.jsxs("span",{children:["Página ",r+1," de ",l," · ",s.length," usuário(s)",t?" no filtro":""]}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx("button",{type:"button",disabled:r<=0,onClick:()=>m(r-1),className:"px-3 py-1 rounded border border-slate-300 dark:border-slate-700 disabled:opacity-40 hover:bg-slate-50 dark:hover:bg-slate-800",children:"‹ Anterior"}),e.jsx("button",{type:"button",disabled:r>=l-1,onClick:()=>m(r+1),className:"px-3 py-1 rounded border border-slate-300 dark:border-slate-700 disabled:opacity-40 hover:bg-slate-50 dark:hover:bg-slate-800",children:"Próxima ›"})]})]})]})})()]}),e.jsx(Me,{target:w,onClose:()=>C(null),onSaved:()=>{P()}})]})]}):e.jsx(H,{to:"/pt/pro/login?return=/pt/admin",replace:!0})};export{Oe as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.