import{D as e,E as t,_ as n,d as r,f as i,g as a,h as o,m as s,o as c,p as l,s as u,v as ee,y as te}from"./chart-DXupaYdX.js";import{Dt as d,Et as f,Gt as p,H as m,It as h,Kt as g,Nt as _,On as v,Pt as y,St as b,Tt as x,Ut as S,Wt as C,bt as w,cn as T,ct as ne,gt as re,ht as E,pt as D,tn as O,vt as k,xt as A,yt as j}from"./_plugin-vue_export-helper-Df8BHgqR.js";import{F as ie,h as ae,l as oe,w as se,x as ce}from"./index-BanWZHpm.js";import{i as le,n as ue,r as M,t as de}from"./useChartStats-Y1UF0N8D.js";var N=e(t(),1),fe={class:`flex items-center gap-2`},pe={class:`flex h-full flex-col-reverse gap-4 md:flex-row`},me={class:`chart-container`},P=d({__name:`MapChart`,props:{chartData:{},loading:{type:Boolean},connectionStatus:{}},setup(e){let t=e,d=ce(),P=S(`chartContainer`),F=se(),I=O([]),L=O([]),R=O([]),z=O([]),B=O([]),V=O(1),H=O({lat:0,lon:0}),U=O(0),W=null,G=new Map;function K(e,t){if(!e||!t)return[-60,60];let n=t/e,r=Math.min(90,119*n);return[-r,r]}let he=D(()=>{let e=V.value,{lat:t,lon:n}=H.value;if(e>1.1){let r=90/e,i=180/e;d.state.lat_range=[(t-r).toString(),(t+r).toString()],d.state.lon_range=[(n-i).toString(),(n+i).toString()]}else d.state.lat_range=[],d.state.lon_range=[]},400);async function q(e=!1){if(!P.value)return;let c=t.chartData,u=!e&&c===W&&c.length>=U.value&&U.value>0;if(!e&&c===W&&c.length===U.value&&U.value>0)return;u||(G.clear(),U.value=0),(u?c.slice(U.value):c).forEach(e=>{if(e.latitude!==void 0&&e.longitude!==void 0){let t=`${e.latitude.toFixed(4)}_${e.longitude.toFixed(4)}`;G.has(t)||G.set(t,{lat:e.latitude,lon:e.longitude,count:0,ips:new Set,events:new Set,city:e.city||``,country:e.country||``,remoteAddrInts:[],remoteAddrs:[]});let n=G.get(t);n.count++,n.ips.add(e.remote_addr),e.event&&n.events.add(e.event),n.remoteAddrInts.push(e.remote_addr_int),n.remoteAddrs.push(e.remote_addr)}}),W=c,U.value=c.length;let f=[],p=[],m=[],h=[],g=[],_=[],v=[],y=[];G.forEach(e=>{f.push(e.lat),p.push(e.lon);let t=6+Math.log10(e.count+1)*12;h.push(t);let n=new Map;e.remoteAddrs.forEach(e=>n.set(e,(n.get(e)||0)+1));let r=Array.from(e.ips).sort((e,t)=>(n.get(t)||0)-(n.get(e)||0)),i=r.slice(0,5).join(`, `),a=r.length>5?` (+${r.length-5} more)`:``,o=Array.from(e.events).sort().slice(0,3).join(`, `),s=oe.get(e.country),c=s?`${s[1]}`:e.country||`Unknown`,l=s?s[0]:``;m.push(`<b>${l} ${e.city||`Unknown City`}, ${c}</b><br>Events: ${e.count}<br>IPs: ${i}${a}<br>Types: ${o}`),g.push(t),_.push(r),v.push(e.count),y.push(e.country)});let b=[{type:F.mapType,mode:`markers`,lat:f,lon:p,text:m,marker:{size:h,color:g,showscale:!1,line:{color:a,width:n}},hoverinfo:`text`,hoverlabel:r}],x=P.value.clientWidth,S=P.value.clientHeight,C=K(x,S),w={autosize:!0,width:x,height:S,geo:{projection:{scale:V.value,type:`mercator`},center:H.value,showland:!0,showocean:!0,showcountries:!0,coastlinecolor:l,countrycolor:s,landcolor:o,oceancolor:ee,showsubunits:!0,subunitcolor:s,bgcolor:`transparent`,resolution:110,showframe:!1,lataxis:{range:C},lonaxis:{range:[-180,180]}},margin:i,paper_bgcolor:`transparent`,plot_bgcolor:`transparent`,map:{style:`dark`},modebar:te};await N.default.react(P.value,b,w,{responsive:!0,displaylogo:!1}),I.value=g,L.value=_,R.value=h,z.value=v,B.value=y;let T=P.value;T.removeAllListeners?.(`plotly_click`),T.on(`plotly_click`,e=>{let t=e.points[0]?.pointIndex;if(t!==void 0){let e=L.value[t];Array.isArray(e)&&(e=e[0]),e&&X(e)}}),T.on(`plotly_selected`,e=>{if(e&&e.points){F.selectedIP=void 0,F.selectedPort=void 0;let t=0,n=new Set;e.points.forEach(e=>{t+=z.value[e.pointIndex]||0;let r=L.value[e.pointIndex];r&&(Array.isArray(r)?r.forEach(e=>n.add(e)):n.add(r))}),F.selectedCount=t,F.selectedIPCount=n.size}else F.selectedCount=0,F.selectedIPCount=0}),T.removeAllListeners?.(`plotly_relayout`),T.on(`plotly_relayout`,e=>{if(e[`geo.autorange`]){d.state.lat_range=[],d.state.lon_range=[],V.value=1,H.value={lat:0,lon:0};return}let t=V.value;e[`geo.projection.scale`]===void 0?e.geo?.projection?.scale!==void 0&&(t=e.geo.projection.scale):t=e[`geo.projection.scale`];let n=H.value.lat,r=H.value.lon;e[`geo.center.lat`]!==void 0&&(n=e[`geo.center.lat`]),e[`geo.center.lon`]!==void 0&&(r=e[`geo.center.lon`]),e[`geo.center`]!==void 0&&(e[`geo.center`].lat!==void 0&&(n=e[`geo.center`].lat),e[`geo.center`].lon!==void 0&&(r=e[`geo.center`].lon)),e.geo?.center!==void 0&&(e.geo.center.lat!==void 0&&(n=e.geo.center.lat),e.geo.center.lon!==void 0&&(r=e.geo.center.lon)),V.value=t,H.value={lat:n,lon:r},he()})}let{selectedIP:J,selectedCountry:Y,selectedColor:ge,highlightIP:X,highlightCountry:_e,resetSelection:ve}=ue(P,I,L,void 0,R,z,B),ye=k(()=>d.state.x_range),be=k(()=>d.state.y_range),xe=k(()=>d.state.lat_range),Se=k(()=>d.state.lon_range),{ipCounts:Z,countryCounts:Q}=de(k(()=>t.chartData),ye,be,xe,Se);C(()=>t.chartData,()=>{q()},{deep:!0}),_(()=>{P.value&&N.default.purge(P.value)}),ne(P,D(()=>{if(P.value){let e=P.value;if(e.data?.length){let t=e.clientWidth,n=e.clientHeight,r=K(t,n);N.default.relayout(e,{width:t,height:n,"geo.lataxis.range":r})}else q(!0)}},100));let $=O(!1);return y(()=>{$.value=!0}),(t,n)=>(h(),b(E,null,[$.value?(h(),w(re,{key:0,to:`#chart-actions`},[T(J)||T(Y)||T(F).selectedCount>0?(h(),b(`button`,{key:0,type:`button`,onClick:n[0]||=e=>T(ve)(),class:`btn-secondary py-0.5 whitespace-nowrap`},[f(T(m),{class:`text-[10px]`,color:T(ge)},null,8,[`color`]),x(` `+v(T(F).selectedCount)+` events (`+v(T(F).selectedIPCount)+` IPs) `,1),n[3]||=j(`kbd`,{class:`ml-1 text-[10px] opacity-50`},`ESC`,-1)])):A(``,!0),j(`div`,fe,[n[5]||=j(`label`,{for:`map-type`,class:`filter-label`},`Map Type:`,-1),g(j(`select`,{id:`map-type`,"onUpdate:modelValue":n[1]||=e=>T(F).mapType=e,class:`select`,onChange:n[2]||=e=>q(!0)},[...n[4]||=[j(`option`,{value:`scattergeo`},`Simple`,-1),j(`option`,{value:`scattermap`},`Carto Map`,-1)]],544),[[ie,T(F).mapType]])])])):A(``,!0),j(`div`,pe,[f(le,null,{default:p(()=>[T(Z).length>0?(h(),w(M,{key:0,open:``,title:`Top IPs`,items:T(Z),type:`ip`,"selected-item":T(J),onClick:T(X),onExclude:T(u)},null,8,[`items`,`selected-item`,`onClick`,`onExclude`])):A(``,!0),T(Q).length>0?(h(),w(M,{key:1,title:`Top Countries`,items:T(Q),type:`country`,"selected-item":T(Y),onClick:T(_e),onExclude:T(c)},null,8,[`items`,`selected-item`,`onClick`,`onExclude`])):A(``,!0)]),_:1}),j(`div`,me,[e.loading?(h(),w(ae,{key:0})):A(``,!0),j(`div`,{ref_key:`chartContainer`,ref:P,class:`h-full min-h-0 w-full touch-none overflow-hidden`},null,512)])])],64))}});export{P as default};