import{n as e,s as t,t as n}from"./jsx-runtime-Bzw2jH9X.js";import{Jt as r,Zt as i,_t as a,bt as o,mt as s,nn as c,on as l,rn as u,vt as d,yt as f}from"./services-DDmOapmW.js";import{t as p}from"./spin-D_N6wvMK.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{r.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 f({ymToken:e});localStorage.setItem(l,e),r.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 r.on(`auth:login`,e),r.on(`auth:logout`,t),()=>{r.off(`auth:login`,e),r.off(`auth:logout`,t)}},[]);let S=(0,m.useCallback)(async e=>{let{user:t,token:n}=e.type===`password`?await a({phone:e.phone,password:e.password}):await d({mobile:e.mobile,code:e.code});r.emit(`auth:login`,{user:t,accessToken:n.accessToken})},[]),C=(0,m.useCallback)(e=>{r.emit(`auth:login`,{user:e.user,accessToken:e.accessToken})},[]),w=(0,m.useCallback)(async()=>{try{await o(),i.success(`已退出登录`)}catch{}finally{r.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};