1import{a as c,j as e}from"./vendor-radix-DA_aSpdM.js";import{A as S,I as y}from"./AdminLayout-nimK7lg5.js";import{L as X,E as l,G as o,I as m,F as d,J as f}from"./App-B5Gw_pr3.js";import{S as Y,a as q,b as H,c as J,d as p}from"./select-Cs9UswgO.js";import{B as x}from"./badge-B-Ty_vzC.js";import{supabase as b}from"./client-CfsuD3lc.js";import{S as w}from"./send-CA7W4L6T.js";import{C as U}from"./circle-check-Dfb7QgyX.js";import{S as M}from"./smartphone-Bd9Oc64X.js";import{M as z}from"./message-square-DFAlivbY.js";import{R,T as D,B as C}from"./generateCategoricalChart-BLauEe_n.js";import{L as O,a as g}from"./LineChart-hKxm76_E.js";import{C as _}from"./CartesianGrid-k9FZRj2r.js";import{X as k,Y as I}from"./YAxis-CgNcT2DU.js";import{B as P}from"./BarChart-CpN7LaLF.js";import{T as Q}from"./trending-up-l4bIqg9u.js";import{f as h}from"./format-CExLiZ08.js";import{s as Z}from"./subDays-zfsdsliS.js";import"./vendor-supabase-BQ1HIAaS.js";import"./SkipToContent-CRgQc9eq.js";import"./brand-logo-kjEenLET.js";import"./sheet-BHtbuGFR.js";import"./separator-Cgp4LhR9.js";import"./ImpersonationToggle-BRocflVz.js";import"./dropdown-menu-ChdUSMQt.js";import"./chevron-right-Cmx-b24l.js";import"./circle-DL6kpMyo.js";import"./shield-C-xd0eAw.js";import"./user-CgX6Dyy8.js";import"./credit-card-dMGg-XQc.js";import"./crown-D0qgxAkK.js";import"./chevron-down-BVDfP_2L.js";import"./label-C-UxXqOz.js";import"./selfHealingClient-gRPkGxKK.js";import"./edgeFunctionErrors-tek4dUTq.js";import"./useLandingPagePermissions-BjPztEie.js";import"./collapsible-_UOuurKf.js";import"./search-BFm-z-Ci.js";import"./file-text-OpyKyVh6.js";import"./activity-DRKg8dQb.js";import"./mail-DDgusAuE.js";import"./gauge-BRHHaukB.js";import"./heart-YBbuRWzl.js";import"./phone-Cs-wLLGh.js";import"./image-CqJayY8t.js";import"./video-D1DWu8bZ.js";import"./star-1ED16WG2.js";import"./wand-sparkles-Db2hkwxf.js";import"./sparkles-D-iVX4_g.js";import"./eye-WQc0jBQG.js";import"./file-plus-D7lTECvR.js";import"./circle-user-Co-3pjw4.js";import"./trash-2-B59JfgoK.js";import"./brain-D0GmRisc.js";import"./mic-wZvsWghy.js";import"./headphones-RLJv_3gl.js";import"./briefcase-C-ZD2yWu.js";import"./dollar-sign-XmxulMHk.js";import"./sliders-vertical-kFQXeN6m.js";import"./layers-C8ORVey8.js";import"./users-BR4IszS0.js";import"./bot-BCTcZgdo.js";import"./DebugPanel-BwQGyL_D.js";import"./copy-B1KPSnbw.js";import"./minimize-2-cUlE5igx.js";import"./scroll-text-DXxYYgQf.js";import"./chart-column-fxXAAZC4.js";import"./shield-check-DAIRPbOF.js";import"./arrow-left-DFNdcU_9.js";import"./log-out-CtF_CrgZ.js";import"./useKeyboardVisibility-ByIRFiiI.js";import"./useSafeTimers-Dtwb407y.js";import"./globe-Cvbm9E-T.js";import"./flask-conical-CnxH0GOd.js";import"./calendar-fhbGUQ2x.js";import"./palette-Dz_xSOuh.js";import"./clipboard-check-Cs7z8jbJ.js";import"./message-circle-D3WZC271.js";import"./hash-DOoXCYFm.js";import"./scale-4QH1X5M8.js";import"./index-C1MkrzIu.js";import"./sentry-kztijHPz.js";import"./platformErrorLogger-4hUhfrtL.js";import"./lazyWithRetry-DxnkR6rW.js";import"./edgeFunctionClient-Cktd4gAf.js";import"./chevron-up-BctWVrXv.js";import"./index-Dh4i1-J3.js";import"./en-US-B63PQzQM.js";import"./constructFrom-rJN6zrQ_.js";function Ts(){const[n,L]=c.useState([]),[F,u]=c.useState(!0),[j,T]=c.useState("7"),[a,A]=c.useState({totalSent:0,totalReceived:0,totalDelivered:0,totalFailed:0,deliveryRate:0,imessageRate:0,characterRate:0});c.useEffect(()=>{B()},[j]);const B=async()=>{if(!b)return;u(!0);const s=parseInt(j),V=h(Z(new Date,s),"yyyy-MM-dd"),{data:W,error:G}=await b.from("sms_analytics").select("*").gte("date",V).order("date",{ascending:!0});if(!G){const v=W||[];L(v);const t=v.reduce((r,i)=>({totalSent:r.totalSent+i.messages_sent,totalReceived:r.totalReceived+i.messages_received,totalDelivered:r.totalDelivered+i.messages_delivered,totalFailed:r.totalFailed+i.messages_failed,totalImessage:r.totalImessage+i.imessage_count,totalSms:r.totalSms+i.sms_count,totalCharacter:r.totalCharacter+i.character_messages}),{totalSent:0,totalReceived:0,totalDelivered:0,totalFailed:0,totalImessage:0,totalSms:0,totalCharacter:0}),N=t.totalImessage+t.totalSms;A({totalSent:t.totalSent,totalReceived:t.totalReceived,totalDelivered:t.totalDelivered,totalFailed:t.totalFailed,deliveryRate:t.totalSent>0?t.totalDelivered/t.totalSent*100:0,imessageRate:N>0?t.totalImessage/N*100:0,characterRate:t.totalSent>0?t.totalCharacter/t.totalSent*100:0})}u(!1)},K=n.map(s=>({date:h(new Date(s.date),"MMM d"),sent:s.messages_sent,received:s.messages_received,delivered:s.messages_delivered,failed:s.messages_failed})),E=n.map(s=>({date:h(new Date(s.date),"MMM d"),iMessage:s.imessage_count,SMS:s.sms_count}));return F?e.jsx(S,{children:e.jsx("div",{className:"flex items-center justify-center h-96",children:e.jsx(X,{className:"h-8 w-8 animate-spin text-muted-foreground"})})}
1):e.jsx(S,{children:e.jsxs("div",{className:"space-y-4 sm:space-y-6",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"text-xl sm:text-2xl md:text-3xl font-bold",children:"Text Analytics"}),e.jsx("p",{className:"text-muted-foreground text-sm sm:text-base",children:"Track SMS/iMessage delivery and engagement"})]}),e.jsxs(Y,{value:j,onValueChange:T,children:[e.jsx(q,{className:"w-32 sm:w-40",children:e.jsx(H,{})}),e.jsxs(J,{children:[e.jsx(p,{value:"7",children:"Last 7 days"}),e.jsx(p,{value:"14",children:"Last 14 days"}),e.jsx(p,{value:"30",children:"Last 30 days"}),e.jsx(p,{value:"90",children:"Last 90 days"})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-2 sm:gap-4",children:[e.jsxs(l,{children:[e.jsxs(o,{className:"flex flex-row items-center justify-between pb-2",children:[e.jsx(m,{className:"text-sm font-medium",children:"Messages Sent"}),e.jsx(w,{className:"h-4 w-4 text-muted-foreground"})]}),e.jsxs(d,{children:[e.jsx("div",{className:"text-2xl font-bold",children:a.totalSent.toLocaleString()}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[a.characterRate.toFixed(0),"% from characters"]})]})]}),e.jsxs(l,{children:[e.jsxs(o,{className:"flex flex-row items-center justify-between pb-2",children:[e.jsx(m,{className:"text-sm font-medium",children:"Messages Received"}),e.jsx(y,{className:"h-4 w-4 text-muted-foreground"})]}),e.jsxs(d,{children:[e.jsx("div",{className:"text-2xl font-bold",children:a.totalReceived.toLocaleString()}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Inbound messages"})]})]}),e.jsxs(l,{children:[e.jsxs(o,{className:"flex flex-row items-center justify-between pb-2",children:[e.jsx(m,{className:"text-sm font-medium",children:"Delivery Rate"}),e.jsx(U,{className:"h-4 w-4 text-green-500"})]}),e.jsxs(d,{children:[e.jsxs("div",{className:"text-2xl font-bold",children:[a.deliveryRate.toFixed(1),"%"]}),e.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[e.jsxs("span",{className:"text-green-500",children:[a.totalDelivered," delivered"]}),a.totalFailed>0&&e.jsxs("span",{className:"text-red-500",children:[a.totalFailed," failed"]})]})]})]}),e.jsxs(l,{children:[e.jsxs(o,{className:"flex flex-row items-center justify-between pb-2",children:[e.jsx(m,{className:"text-sm font-medium",children:"iMessage Rate"}),e.jsx(M,{className:"h-4 w-4 text-blue-500"})]}),e.jsxs(d,{children:[e.jsxs("div",{className:"text-2xl font-bold",children:[a.imessageRate.toFixed(1),"%"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"vs SMS fallback"})]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[e.jsxs(l,{children:[e.jsxs(o,{children:[e.jsx(m,{children:"Message Volume"}),e.jsx(f,{children:"Sent and received messages over time"})]}),e.jsx(d,{children:n.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center h-64 text-muted-foreground",children:[e.jsx(z,{className:"h-12 w-12 mb-4 opacity-50"}),e.jsx("p",{children:"No data available yet"}),e.jsx("p",{className:"text-sm",children:"Start sending messages to see analytics"})]}):e.jsx(R,{width:"100%",height:300,children:e.jsxs(O,{data:K,children:[e.jsx(_,{strokeDasharray:"3 3",className:"stroke-muted"}),e.jsx(k,{dataKey:"date",className:"text-xs"}),e.jsx(I,{className:"text-xs"}),e.jsx(D,{contentStyle:{backgroundColor:"hsl(var(--card))",border:"1px solid hsl(var(--border))",borderRadius:"8px"}}),e.jsx(g,{type:"monotone",dataKey:"sent",stroke:"hsl(var(--primary))",strokeWidth:2,dot:!1,name:"Sent"}),e.jsx(g,{type:"monotone",dataKey:"received",stroke:"hsl(var(--chart-2))",strokeWidth:2,dot:!1,name:"Received"}),e.jsx(g,{type:"monotone",dataKey:"delivered",stroke:"hsl(142, 76%, 36%)",strokeWidth:2,dot:!1,name:"Delivered"})]})})})]}),e.jsxs(l,{children:[e.jsxs(o,{children:[e.jsx(m,{children:"iMessage vs SMS"}),e.jsx(f,{children:"Message breakdown by service type"})]}),e.jsx(d,{children:n.length===0?e.jsxs("div",{className:"flex flex-col items-center justify-center h-64 text-muted-foreground",children:[e.jsx(M,{className:"h-12 w-12 mb-4 opacity-50"}),e.jsx("p",{children:"No data available yet"})]}):e.jsx(R,{width:"100%",height:300,children:e.jsxs(P,{data:E,children:[e.jsx(_,{strokeDasharray:"3 3",className:"stroke-muted"}),e.jsx(k,{dataKey:"date",className:"text-xs"}),e.jsx(I,{className:"text-xs"}),e.jsx(D,{contentStyle:{backgroundColor:"hsl(var(--card))",border:"1px solid hsl(var(--border))",borderRadius:"8px"}}),e.jsx(C,{dataKey:"iMessage",fill:"hsl(221, 83%, 53%)",name:"iMessage",stackId:"a"}),e.jsx(C,{dataKey:"SMS",fill:"hsl(var(--muted-foreground))",name:"SMS",stackId:"a"})]})})})]})]}),e.jsxs(l,{children:[e.jsxs(o,{children:[e.jsx(m,{children:"Daily Breakdown"}),e.jsx(f,{children:"Detailed metrics by day"})]}),e.jsx(d,{children:n.length===0?e.jsxs("div",{className:"text-center py-8 text-muted-foreground",children:[e.jsx(Q,{className:"h-8 w-8 mx-auto mb-2 opacity-50"}
1),e.jsx("p",{children:"No analytics data yet"})]}):e.jsx("div",{className:"space-y-2",children:n.slice().reverse().map(s=>e.jsxs("div",{className:"flex items-center justify-between p-3 rounded-lg bg-muted/50",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("span",{className:"font-medium",children:h(new Date(s.date),"MMM d, yyyy")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(x,{variant:"outline",className:"text-xs",children:[e.jsx(w,{className:"h-3 w-3 mr-1"}),s.messages_sent," sent"]}),e.jsxs(x,{variant:"outline",className:"text-xs",children:[e.jsx(y,{className:"h-3 w-3 mr-1"}),s.messages_received," received"]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(x,{variant:"secondary",className:"text-xs bg-blue-500/10 text-blue-500",children:[s.imessage_count," iMessage"]}),e.jsxs(x,{variant:"secondary",className:"text-xs",children:[s.sms_count," SMS"]}),s.messages_failed>0&&e.jsxs(x,{variant:"destructive",className:"text-xs",children:[s.messages_failed," failed"]})]})]},s.date))})})]})]})})}export{Ts 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.