import{n as e,s as t,t as n}from"./jsx-runtime-Bzw2jH9X.js";import{$t as r,St as i,Xt as a,bt as o,gt as s,in as c,ln as l,on as u,xt as d,yt as f}from"./services-CsyI_p0I.js";import{t as p}from"./spin-CZX9Vgqv.js";var m=t(e(),1),h=n();function g(){return new URLSearchParams(window.location.search).get(`ymToken`)}function _(){let e=new URL(window.location.href);if(!e.searchParams.has(`ymToken`))return;e.searchParams.delete(`ymToken`);let t=`${e.pathname}${e.search}${e.hash}`;window.history.replaceState(null,``,t)}var v=(0,m.createContext)(null);function y({children:e}){let[t,n]=(0,m.useState)({user:null,accessToken:localStorage.getItem(u)}),[y,b]=(0,m.useState)(()=>{let e=g();return!!(e&&e!==localStorage.getItem(`ymToken`))}),x=(0,m.useCallback)(async()=>{let e=localStorage.getItem(u);if(e)try{let t=await s();n({user:t,accessToken:e})}catch{a.emit(`auth:logout`)}},[]);(0,m.useEffect)(()=>{x()},[x]),(0,m.useEffect)(()=>{let e=g();if(e){if(e===localStorage.getItem(`ymToken`)){_();return}(async()=>{try{let{user:t,token:n}=await d({ymToken:e});localStorage.setItem(l,e),a.emit(`auth:login`,{user:t,accessToken:n.accessToken})}catch(e){console.error(e)}finally{_(),b(!1)}})()}},[]),(0,m.useEffect)(()=>{let e=({user:e,accessToken:t})=>{t&&localStorage.setItem(u,t),n({user:e,accessToken:t})},t=()=>{localStorage.removeItem(u),localStorage.removeItem(c),localStorage.removeItem(l),n({user:null,accessToken:null})};return a.on(`auth:login`,e),a.on(`auth:logout`,t),()=>{a.off(`auth:login`,e),a.off(`auth:logout`,t)}},[]);let S=(0,m.useCallback)(async e=>{let{user:t,token:n}=e.type===`password`?await f({phone:e.phone,password:e.password}):await o({mobile:e.mobile,code:e.code});a.emit(`auth:login`,{user:t,accessToken:n.accessToken})},[]),C=(0,m.useCallback)(e=>{a.emit(`auth:login`,{user:e.user,accessToken:e.accessToken})},[]),w=(0,m.useCallback)(async()=>{try{await i(),r.success(`已退出登录`)}catch{}finally{a.emit(`auth:logout`)}},[]),T=(0,m.useCallback)(e=>{n(t=>({...t,user:t.user?{...t.user,...e}:null}))},[]);return(0,h.jsx)(v.Provider,{value:{...t,isAuthenticated:!!t.accessToken,login:S,loginByWechat:C,logout:w,patchUser:T},children:y?(0,h.jsx)(`div`,{className:`flex h-screen items-center justify-center bg-zinc-50`,children:(0,h.jsx)(p,{description:`åŠ è½½ä¸...`})}):e})}function b(){let e=(0,m.useContext)(v);if(!e)throw Error(`useAuth must be used within AuthProvider`);return e}export{b as n,y as t};