import { createContext, useContext, useEffect, useState } from 'react' import { api, getToken, setToken, setRememberFlag } from '../api/client.js' const AuthContext = createContext(null) export function AuthProvider({ children }) { const [user, setUser] = useState(null) const [loading, setLoading] = useState(true) // 启动时: 有 token 就尝试拉 /me, 失败则清空 useEffect(() => { let cancelled = false async function bootstrap() { if (!getToken()) { setLoading(false) return } try { const data = await api('/auth/me') if (!cancelled) setUser(data.user) } catch { if (!cancelled) { setToken('') setUser(null) } } finally { if (!cancelled) setLoading(false) } } bootstrap() return () => { cancelled = true } }, []) async function login(email, password, remember) { const data = await api('/auth/login', { method: 'POST', body: { email, password, remember: !!remember } }) setToken(data.token) setRememberFlag(!!remember) setUser(data.user) return data.user } async function logout() { try { await api('/auth/logout', { method: 'POST' }) } catch { /* ignore */ } setToken('') setRememberFlag(false) setUser(null) } return ( {children} ) } export function useAuth() { const ctx = useContext(AuthContext) if (!ctx) throw new Error('useAuth must be used inside AuthProvider') return ctx }