import{j as e,r as m}from"./react-vendor-jWT2yUdV.js";import{t as I,a as R}from"./chunk-ML27DD5T-ZFWrMOn-.js";import{u as z}from"./useRequest-B1BwPztr.js";import{z as v}from"./react-hot-toast-cGcFZPSt.js";import{u as E,k as A,c as S,b as k,P as $,W as j}from"./index-DiaaLdUu.js";import{a as D,c as W}from"./chunk-5PILOUBS-KHYNqMZE.js";import{c as T}from"./chunk-D5XJWRAV-DVN21qSw.js";import{s as _,l as C}from"./chunk-KVDW62ZT-CGYYmJoP.js";import{X as y}from"./xterm-m1lN6Krd.js";import{c as B}from"./chunk-NAV3ZXLI-ChbUTMf0.js";import{y as P}from"./index-FvTxWQTZ.js";import"./qface-BZLvZXJ8.js";import"./index-BV9-YCKp.js";import"./chunk-UX7UMZL5-CMHjUaC_.js";import"./SelectionManager-Dl9uHsLK.js";import"./usePress-BrNwsdVw.js";import"./layout-Buao20KT.js";import"./gestures-BHfQC-M8.js";import"./features-animation-BkV7kg8P.js";import"./Item-D8Sud-UP.js";import"./react-router-dom-C6k78GT4.js";import"./chunk-WQVQ7P2I-BJd1EiqP.js";import"./chunk-SLABUSGS-Cmz8sGrU.js";import"./DOMLayoutDelegate-DOgfSALU.js";import"./useHover-DC1o5-bm.js";import"./chunk-AXSF7SRE-Cr4elNVq.js";import"./chunk-M3MASYO7-B4fjH-eW.js";import"./iconBase-B7bT1FlI.js";var o=(r=>(r.DEBUG="debug",r.INFO="info",r.WARN="warn",r.ERROR="error",r.FATAL="fatal",r))(o||{});const G={[o.DEBUG]:"green",[o.INFO]:"black",[o.WARN]:"yellow",[o.ERROR]:"red",[o.FATAL]:"red"},X=r=>{var u;const l=r.match(/\[[a-zA-Z]+\]/)||[];let t=r;const a=((u=l==null?void 0:l[0])==null?void 0:u.replace("[","").replace("]",""))??o.INFO;switch(G[a]){case"green":t=`\x1B[32m${t}\x1B[0m`;break;case"black":t=`\x1B[30m${t}\x1B[0m`;break;case"yellow":t=`\x1B[33m${t}\x1B[0m`;break;case"red":t=`\x1B[31m${t}\x1B[0m`;break;default:t=`\x1B[30m${t}\x1B[0m`}return{content:t,level:a}},N=(r,l)=>{let t=r;switch(l){case o.DEBUG:t=`\x1B[32m[DEBUG] ${r}\x1B[0m`;break;case o.INFO:t=`\x1B[30m[INFO] ${r}\x1B[0m`;break;case o.WARN:t=`\x1B[33m[WARN] ${r}\x1B[0m`;break;case o.ERROR:t=`\x1B[31m[ERROR] ${r}\x1B[0m`;break;case o.FATAL:t=`\x1B[31m[FATAL] ${r}\x1B[0m`;break;default:t=`\x1B[30m${r}\x1B[0m`}return t},M={[o.DEBUG]:"default",[o.INFO]:"primary",[o.WARN]:"warning",[o.ERROR]:"primary",[o.FATAL]:"primary"},O=r=>{const{selectedKeys:l,onSelectionChange:t}=r;return e.jsx(_,{selectedKeys:l,onSelectionChange:a=>{a!=="all"&&(a==null?void 0:a.size)===0&&(a="all"),t(a)},label:"日志级别",selectionMode:"multiple","aria-label":"Log Level",classNames:{label:"mb-2",trigger:"bg-white/80 dark:bg-white/[0.06] border border-black/[0.08] dark:border-white/12 backdrop-blur-sm hover:!bg-white/95 dark:hover:!bg-white/[0.09]",popoverContent:"bg-white/90 dark:bg-zinc-900/90 backdrop-blur-xl border border-white/70 dark:border-white/10"},size:"sm",items:[{label:"Debug",value:o.DEBUG},{label:"Info",value:o.INFO},{label:"Warn",value:o.WARN},{label:"Error",value:o.ERROR},{label:"Fatal",value:o.FATAL}],renderValue:a=>a.length===5?e.jsx(B,{size:"sm",color:"primary",variant:"flat",children:"全部"}):e.jsx("div",{className:"flex gap-2",children:a.map(i=>{var u,x;return e.jsx(B,{size:"sm",color:M[(u=i.data)==null?void 0:u.value],variant:"flat",children:(x=i.data)==null?void 0:x.label},i.key)})}),children:a=>e.jsx(C,{value:a.value,children:a.label},a.value)})},q=r=>{const{list:l,onSelect:t,selectedLog:a,refreshList:i,refreshLog:u,listLoading:x,logContent:f,listError:p,logLoading:g}=r,c=m.useRef(null),[n,s]=m.useState(new Set(["info","warn","error"])),[b]=E(A.backgroundImage,""),L=!!b,U=d=>d.split(` `).map(h=>X(h)).filter(h=>n==="all"?!0:n.has(h.level)).map(h=>h.content).join(`\r `),F=()=>{if(!f)return;const d=new Blob([f],{type:"text/plain"}),w=URL.createObjectURL(d),h=document.createElement("a");h.href=w,h.download=`${a}.log`,h.click(),URL.revokeObjectURL(w)};return m.useEffect(()=>{if(!c.current||!f)return;c.current.clear();const d=U(f);c.current.write(d+`\r snowcat@webui:~$ `)},[f,n]),e.jsxs(e.Fragment,{children:[e.jsx("title",{children:"历史日志 - SnowCat WebUI"}),e.jsxs(D,{className:S("max-w-full h-full backdrop-blur-sm border border-white/40 dark:border-white/10 shadow-sm",L?"bg-black/25 dark:bg-black/30":"bg-white/60 dark:bg-white/[0.04]"),children:[e.jsxs(T,{className:"flex-row justify-start gap-3",children:[e.jsx(_,{label:"选择日志",size:"sm",isLoading:x,errorMessage:p==null?void 0:p.message,classNames:{trigger:"bg-default-100/50 backdrop-blur-sm hover:!bg-default-200/50"},placeholder:"选择日志",onChange:d=>{const w=d.target.value;w&&t(w)},selectedKeys:[a||""],items:l.map(d=>({value:d,label:d})),children:d=>e.jsx(C,{value:d.value,children:d.label},d.value)}),e.jsx(O,{selectedKeys:n,onSelectionChange:s}),e.jsxs("div",{className:"flex gap-2 ml-auto",children:[e.jsx(k,{className:"flex-shrink-0",onPress:F,size:"sm",variant:"flat",color:"primary",children:"下载日志"}),e.jsx(k,{onPress:i,size:"sm",variant:"flat",children:"刷新列表"}),e.jsx(k,{onPress:u,size:"sm",variant:"flat",children:"刷新日志"})]})]}),e.jsxs(W,{className:"relative",children:[e.jsx($,{loading:g}),e.jsx(y,{className:"w-full h-full",ref:c})]})]})]})},H=()=>{const r=m.useRef(null),[l,t]=m.useState(new Set(["info","warn","error"])),[a,i]=m.useState([]),[u]=E(A.backgroundImage,""),x=!!u,f=()=>{const g=a.filter(b=>l==="all"?!0:l.has(b.level)).map(b=>N(b.message,b.level)).join(`\r `),c=new Blob([g],{type:"text/plain"}),n=URL.createObjectURL(c),s=document.createElement("a");s.href=n,s.download="snowcat.log",s.click(),URL.revokeObjectURL(n)},p=()=>{var g,c;try{const n=a.filter(s=>l==="all"?!0:l.has(s.level)).map(s=>N(s.message,s.level)).join(`\r `);(g=r.current)==null||g.clear(),(c=r.current)==null||c.write(n)}catch(n){console.error(n),v.error("获取实时日志失败")}};return m.useEffect(()=>{p()},[l,a]),m.useEffect(()=>{const c=(()=>{try{const n=j.getRealTimeLogs(s=>{i(b=>{const L=[...b,...s];return L.length>1e3&&L.splice(0,L.length-1e3),L})});return()=>{n.close()}}catch{v.error("获取实时日志失败")}})();return()=>{console.log("close"),c==null||c()}},[]),e.jsxs(e.Fragment,{children:[e.jsx("title",{children:"实时日志 - SnowCat WebUI"}),e.jsxs("div",{className:S("flex items-center gap-2 p-2 rounded-2xl border backdrop-blur-sm transition-all shadow-sm mb-4",x?"bg-black/25 dark:bg-black/30 border-white/20 dark:border-white/10":"bg-white/60 dark:bg-white/[0.04] border-white/60 dark:border-white/10"),children:[e.jsx(O,{selectedKeys:l,onSelectionChange:t}),e.jsx(k,{className:"flex-shrink-0 bg-white/60 dark:bg-white/[0.06] text-default-600 border border-white/50 dark:border-white/10 font-medium",radius:"full",onPress:f,startContent:e.jsx(P,{className:"text-lg"}),variant:"flat",children:"下载日志"})]}),e.jsx("div",{className:"flex-1 h-full overflow-hidden",children:e.jsx(y,{ref:r})})]})};function je(){const{data:r,loading:l,error:t,refresh:a}=z(j.getLogList),[i,u]=m.useState(null),[x,f]=m.useState(null),[p,g]=m.useState(!1),c=s=>{u(s)},n=async()=>{if(i){g(!0);try{const s=await j.getLogContent(i);f(s)}catch(s){const b=s.message;v.error(`加载日志失败: ${b}`)}finally{g(!1)}}};return m.useEffect(()=>{r&&r.length>0&&u(r[0])},[r]),m.useEffect(()=>{i&&n()},[i]),e.jsx("div",{className:"h-[calc(100vh-3.5rem)] flex flex-col gap-3 items-center pt-4 px-3 md:px-6",children:e.jsxs(I,{"aria-label":"Logs",classNames:{panel:"w-full flex-1 h-full py-0 flex flex-col gap-4",base:"flex-shrink-0 !h-fit",tabList:"sc-tablist",cursor:"sc-tab-cursor"},children:[e.jsx(R,{title:"实时日志",children:e.jsx(H,{})}),e.jsx(R,{title:"历史日志",children:e.jsx(q,{list:r||[],onSelect:c,selectedLog:i||void 0,refreshList:a,refreshLog:n,listLoading:l,logLoading:p,listError:t,logContent:x||void 0})})]})})}export{je as default};