import{r as A,j as r,R}from"./react-vendor-jWT2yUdV.js";import{N as Ue,s as Oe,b as L}from"./index-DiaaLdUu.js";import{i as le}from"./chunk-2QAN2V2R-B2qCPZrG.js";import{d as k}from"./chunk-IHO36JMK-DJPUeGG0.js";import{c as _}from"./chunk-NAV3ZXLI-ChbUTMf0.js";import{a as ce,l as ue}from"./chunk-KVDW62ZT-CGYYmJoP.js";import{z as E}from"./react-hot-toast-cGcFZPSt.js";import{h as re,i as ee,j as de,k as fe,l as he,m as me}from"./index-DE7yoXMZ.js";import{g as Be}from"./qface-BZLvZXJ8.js";import{Q as D}from"./qq_manager-BfRTEAby.js";import{u as Fe}from"./use-dialog-CRIMuzeE.js";var Te=Ue();const xe=Be(Te),ot=({showRestart:h=!0,compact:l=!1})=>{const i=Fe(),[u,C]=A.useState(""),x=u==="win32",j=u==="darwin",w=u!==""&&u!=="win32"&&u!=="darwin",e=u!=="",[s,t]=A.useState(""),[n,a]=A.useState(""),[d,o]=A.useState([]),[f,m]=A.useState(""),[v,N]=A.useState(""),[g,y]=A.useState(""),[P,Y]=A.useState([]),[Z,U]=A.useState(!1),[X,B]=A.useState(!1),[S,J]=A.useState(!1),Q=c=>/^[0-9a-fA-F]{32}$/.test(c),b=c=>/^[0-9a-fA-F]{2}(-[0-9a-fA-F]{2}){5}$/.test(c.trim().toLowerCase()),z=A.useMemo(()=>{if(!w)return"";const c=v.trim().toLowerCase();return!g&&!c?"":xe(g+c).toString()},[w,g,v]),F=A.useMemo(()=>!w||!f?"":xe(g+f).toString(),[w,g,f]),T=A.useCallback(async()=>{try{const c=await D.getPlatformInfo();C(c.platform)}catch{C("win32")}},[]),$=A.useCallback(async()=>{U(!0);try{const c=await D.getDeviceGUID();t(c.guid),a(c.guid)}catch(c){const M=c.message;t(""),a(""),M.includes("not found")||E.error(`获取 GUID 失败: ${M}`)}finally{U(!1)}},[]),O=A.useCallback(async()=>{try{const c=await D.getGUIDBackups();o(c)}catch{}},[]),H=A.useCallback(async()=>{U(!0);try{const[c,M]=await Promise.all([D.getLinuxMAC().catch(()=>({mac:""})),D.getLinuxMachineId().catch(()=>({machineId:""}))]);m(c.mac),N(c.mac),y(M.machineId)}catch(c){const M=c.message;E.error(`获取设备信息失败: ${M}`)}finally{U(!1)}},[]),G=A.useCallback(async()=>{try{const c=await D.getLinuxMachineInfoBackups();Y(c)}catch{}},[]);A.useEffect(()=>{T()},[T]),A.useEffect(()=>{e&&(x?($(),O()):(H(),G()))},[e,x,$,O,H,G]);const q=()=>{const c=w?F:s;c&&(navigator.clipboard.writeText(c),E.success("已复制到剪贴板"))},se=async()=>{if(!Q(n)){E.error("GUID 格式无效,需要 32 位十六进制字符");return}B(!0);try{await D.setDeviceGUID(n),t(n),E.success("GUID 已设置,重启后生效"),await O()}catch(c){const M=c.message;E.error(`设置 GUID 失败: ${M}`)}finally{B(!1)}},ne=()=>{i.confirm({title:"确认删除",content:"删除 Registry20 后,QQ 将在下次启动时生成新的设备标识。确定要删除吗?",confirmText:"删除",cancelText:"取消",onConfirm:async()=>{try{await D.resetDeviceID(),t(""),a(""),E.success("已删除,重启后生效"),await O()}catch(c){const M=c.message;E.error(`删除失败: ${M}`)}}})},Re=async()=>{try{await D.createGUIDBackup(),E.success("备份已创建"),await O()}catch(c){const M=c.message;E.error(`备份失败: ${M}`)}},De=c=>{i.confirm({title:"确认恢复",content:`确定要从备份 "${c}" 恢复吗?当前的 Registry20 将被覆盖。`,confirmText:"恢复",cancelText:"取消",onConfirm:async()=>{try{await D.restoreGUIDBackup(c),E.success("已恢复,重启后生效"),await $(),await O()}catch(M){const K=M.message;E.error(`恢复失败: ${K}`)}}})},Pe=async()=>{const c=v.trim().toLowerCase();if(!b(c)){E.error("MAC 格式无效,需要 xx-xx-xx-xx-xx-xx 格式");return}B(!0);try{await D.setLinuxMAC(c),m(c),E.success("MAC 已设置,重启后生效"),await G()}catch(M){const K=M.message;E.error(`设置 MAC 失败: ${K}`)}finally{B(!1)}},Se=()=>{f&&(navigator.clipboard.writeText(f),E.success("MAC 已复制到剪贴板"))},be=()=>{i.confirm({title:"确认删除",content:"删除 machine-info 后,QQ 将在下次启动时生成新的设备标识。确定要删除吗?",confirmText:"删除",cancelText:"取消",onConfirm:async()=>{try{await D.resetLinuxDeviceID(),m(""),N(""),E.success("已删除,重启后生效"),await G()}catch(c){const M=c.message;E.error(`删除失败: ${M}`)}}})},Le=async()=>{try{await D.createLinuxMachineInfoBackup(),E.success("备份已创建"),await G()}catch(c){const M=c.message;E.error(`备份失败: ${M}`)}},ze=c=>{i.confirm({title:"确认恢复",content:`确定要从备份 "${c}" 恢复吗?当前的 machine-info 将被覆盖。`,confirmText:"恢复",cancelText:"取消",onConfirm:async()=>{try{await D.restoreLinuxMachineInfoBackup(c),E.success("已恢复,重启后生效"),await H(),await G()}catch(M){const K=M.message;E.error(`恢复失败: ${K}`)}}})},oe=()=>{i.confirm({title:"确认重启",content:"确定要重启 SnowCat 吗?这将导致当前连接断开。",confirmText:"重启",cancelText:"取消",onConfirm:async()=>{J(!0);try{await D.restartSnowCat(),E.success("重启指令已发送")}catch(c){const M=c.message;E.error(`重启失败: ${M}`)}finally{J(!1)}}})};return Z||!e?r.jsx("div",{className:"flex items-center justify-center py-8",children:r.jsx(Oe,{label:"加载中..."})}):j?r.jsx("div",{className:`flex flex-col gap-${l?"3":"4"}`,children:r.jsxs("div",{className:"flex flex-col items-center justify-center py-8 gap-2",children:[r.jsx(_,{variant:"flat",color:"warning",className:"text-xs",children:"macOS 平台暂不支持 GUID 管理"}),r.jsx("div",{className:"text-xs text-default-400",children:"该功能仅适用于 Windows 和 Linux 平台"})]})}):w?r.jsxs("div",{className:`flex flex-col gap-${l?"3":"4"}`,children:[r.jsxs("div",{className:"flex flex-col gap-2",children:[r.jsx("div",{className:"text-sm font-medium text-default-700",children:"当前设备 GUID"}),r.jsxs("div",{className:"flex items-center gap-2",children:[F?r.jsx(_,{variant:"flat",color:"primary",className:"font-mono text-xs max-w-full",children:F}):r.jsx(_,{variant:"flat",color:"warning",className:"text-xs",children:"未设置 / 不存在"}),F&&r.jsx(L,{isIconOnly:!0,size:"sm",variant:"light",onPress:q,"aria-label":"复制GUID",children:r.jsx(re,{size:16})}),r.jsx(L,{isIconOnly:!0,size:"sm",variant:"light",onPress:H,"aria-label":"刷新",children:r.jsx(ee,{size:16})})]}),r.jsx("div",{className:"text-xs text-default-400",children:"GUID = MD5(machine-id + MAC),修改 MAC 即可改变 GUID"})]}),r.jsx(k,{}),r.jsxs("div",{className:"flex flex-col gap-1",children:[r.jsx("div",{className:"text-sm font-medium text-default-700",children:"Machine ID"}),r.jsx(_,{variant:"flat",color:"default",className:"font-mono text-xs max-w-full",children:g||"未知"}),r.jsx("div",{className:"text-xs text-default-400",children:"来自 /etc/machine-id,不可修改"})]}),r.jsx(k,{}),r.jsxs("div",{className:"flex flex-col gap-2",children:[r.jsx("div",{className:"text-sm font-medium text-default-700",children:"当前 MAC 地址"}),r.jsxs("div",{className:"flex items-center gap-2",children:[f?r.jsx(_,{variant:"flat",color:"secondary",className:"font-mono text-xs max-w-full",children:f}):r.jsx(_,{variant:"flat",color:"warning",className:"text-xs",children:"未设置 / 不存在"}),f&&r.jsx(L,{isIconOnly:!0,size:"sm",variant:"light",onPress:Se,"aria-label":"复制MAC",children:r.jsx(re,{size:16})})]})]}),r.jsx(k,{}),r.jsxs("div",{className:"flex flex-col gap-2",children:[r.jsx("div",{className:"text-sm font-medium text-default-700",children:"设置 MAC 地址"}),r.jsx("div",{className:"flex items-center gap-2",children:r.jsx(le,{size:"sm",variant:"bordered",placeholder:"xx-xx-xx-xx-xx-xx",value:v,onValueChange:N,isInvalid:v.length>0&&!b(v),errorMessage:v.length>0&&!b(v)?"格式: xx-xx-xx-xx-xx-xx":void 0,classNames:{input:"font-mono text-sm"},maxLength:17})}),v&&b(v)&&r.jsxs("div",{className:"flex flex-col gap-1 p-2 rounded-lg bg-default-100",children:[r.jsx("div",{className:"text-xs font-medium text-default-500",children:"预览 GUID"}),r.jsx("div",{className:"font-mono text-xs text-primary break-all",children:z}),z!==F&&r.jsx("div",{className:"text-xs text-warning-500",children:"与当前 GUID 不同,保存后重启生效"})]}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(L,{size:"sm",color:"primary",variant:"flat",isLoading:X,isDisabled:!b(v)||v.trim().toLowerCase()===f,onPress:Pe,startContent:r.jsx(de,{size:16}),children:"保存 MAC"}),r.jsx(L,{size:"sm",color:"danger",variant:"flat",isDisabled:!f,onPress:be,startContent:r.jsx(fe,{size:16}),children:"删除"}),r.jsx(L,{size:"sm",color:"secondary",variant:"flat",isDisabled:!f,onPress:Le,startContent:r.jsx(he,{size:16}),children:"手动备份"})]}),r.jsx("div",{className:"text-xs text-default-400",children:"修改 MAC 后 GUID 将变化,需重启 SnowCat 才能生效,操作前会自动备份"})]}),P.length>0&&r.jsxs(r.Fragment,{children:[r.jsx(k,{}),r.jsxs("div",{className:"flex flex-col gap-2",children:[r.jsxs("div",{className:"text-sm font-medium text-default-700",children:["备份列表",r.jsx("span",{className:"text-xs text-default-400 ml-2",children:"(点击恢复)"})]}),r.jsx("div",{className:"max-h-[160px] overflow-y-auto rounded-lg border border-default-200",children:r.jsx(ce,{"aria-label":"备份列表",selectionMode:"none",onAction:c=>ze(c),children:P.map(c=>r.jsx(ue,{startContent:r.jsx(me,{size:16,className:"text-default-400"}),className:"font-mono text-xs",children:c},c))})})]})]}),h&&r.jsxs(r.Fragment,{children:[r.jsx(k,{}),r.jsx(L,{size:"sm",color:"warning",variant:"flat",isLoading:S,onPress:oe,startContent:r.jsx(ee,{size:16}),children:"重启 SnowCat"})]})]}):r.jsxs("div",{className:`flex flex-col gap-${l?"3":"4"}`,children:[r.jsxs("div",{className:"flex flex-col gap-2",children:[r.jsx("div",{className:"text-sm font-medium text-default-700",children:"当前设备 GUID"}),r.jsxs("div",{className:"flex items-center gap-2",children:[s?r.jsx(_,{variant:"flat",color:"primary",className:"font-mono text-xs max-w-full",children:s}):r.jsx(_,{variant:"flat",color:"warning",className:"text-xs",children:"未设置 / 不存在"}),s&&r.jsx(L,{isIconOnly:!0,size:"sm",variant:"light",onPress:q,"aria-label":"复制GUID",children:r.jsx(re,{size:16})}),r.jsx(L,{isIconOnly:!0,size:"sm",variant:"light",onPress:$,"aria-label":"刷新",children:r.jsx(ee,{size:16})})]})]}),r.jsx(k,{}),r.jsxs("div",{className:"flex flex-col gap-2",children:[r.jsx("div",{className:"text-sm font-medium text-default-700",children:"设置 GUID"}),r.jsx("div",{className:"flex items-center gap-2",children:r.jsx(le,{size:"sm",variant:"bordered",placeholder:"输入32位十六进制 GUID",value:n,onValueChange:a,isInvalid:n.length>0&&!Q(n),errorMessage:n.length>0&&!Q(n)?"需要32位十六进制字符":void 0,classNames:{input:"font-mono text-sm"},maxLength:32})}),r.jsxs("div",{className:"flex items-center gap-2",children:[r.jsx(L,{size:"sm",color:"primary",variant:"flat",isLoading:X,isDisabled:!Q(n)||n===s,onPress:se,startContent:r.jsx(de,{size:16}),children:"保存 GUID"}),r.jsx(L,{size:"sm",color:"danger",variant:"flat",isDisabled:!s,onPress:ne,startContent:r.jsx(fe,{size:16}),children:"删除 GUID"}),r.jsx(L,{size:"sm",color:"secondary",variant:"flat",isDisabled:!s,onPress:Re,startContent:r.jsx(he,{size:16}),children:"手动备份"})]}),r.jsx("div",{className:"text-xs text-default-400",children:"修改或删除 GUID 后需重启 SnowCat 才能生效,操作前会自动备份"})]}),d.length>0&&r.jsxs(r.Fragment,{children:[r.jsx(k,{}),r.jsxs("div",{className:"flex flex-col gap-2",children:[r.jsxs("div",{className:"text-sm font-medium text-default-700",children:["备份列表",r.jsx("span",{className:"text-xs text-default-400 ml-2",children:"(点击恢复)"})]}),r.jsx("div",{className:"max-h-[160px] overflow-y-auto rounded-lg border border-default-200",children:r.jsx(ce,{"aria-label":"备份列表",selectionMode:"none",onAction:c=>De(c),children:d.map(c=>r.jsx(ue,{startContent:r.jsx(me,{size:16,className:"text-default-400"}),className:"font-mono text-xs",children:c},c))})})]})]}),h&&r.jsxs(r.Fragment,{children:[r.jsx(k,{}),r.jsx(L,{size:"sm",color:"warning",variant:"flat",isLoading:S,onPress:oe,startContent:r.jsx(ee,{size:16}),children:"重启 SnowCat"})]})]})};var Ge=Object.defineProperty,te=Object.getOwnPropertySymbols,Ce=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable,ge=(h,l,i)=>l in h?Ge(h,l,{enumerable:!0,configurable:!0,writable:!0,value:i}):h[l]=i,ae=(h,l)=>{for(var i in l||(l={}))Ce.call(l,i)&&ge(h,i,l[i]);if(te)for(var i of te(l))pe.call(l,i)&&ge(h,i,l[i]);return h},ie=(h,l)=>{var i={};for(var u in h)Ce.call(h,u)&&l.indexOf(u)<0&&(i[u]=h[u]);if(h!=null&&te)for(var u of te(h))l.indexOf(u)<0&&pe.call(h,u)&&(i[u]=h[u]);return i};/** * @license QR Code generator library (TypeScript) * Copyright (c) Project Nayuki. * SPDX-License-Identifier: MIT */var V;(h=>{const l=class p{constructor(e,s,t,n){if(this.version=e,this.errorCorrectionLevel=s,this.modules=[],this.isFunction=[],e