import { useCallback, useEffect, useMemo, useState } from 'react' import { detectRuntimeEnv } from '../utils/runtimeEnv' export function useAdminAuth({ isProduction, location, t }) { const [message, setMessage] = useState(null) const [token, setToken] = useState(null) const [authChecking, setAuthChecking] = useState(true) const isAdminRoute = location.pathname.startsWith('/admin') || isProduction const runtimeEnv = useMemo(() => detectRuntimeEnv(), []) const isVercel = runtimeEnv.isVercel const showMessage = useCallback((type, text) => { setMessage({ type, text }) setTimeout(() => setMessage(null), 5000) }, []) const handleLogout = useCallback(() => { setToken(null) localStorage.removeItem('ds2api_token') localStorage.removeItem('ds2api_token_expires') sessionStorage.removeItem('ds2api_token') sessionStorage.removeItem('ds2api_token_expires') }, []) const handleLogin = useCallback((newToken) => { setToken(newToken) }, []) useEffect(() => { if (!isAdminRoute) { setAuthChecking(false) return } const checkAuth = async () => { const storedToken = localStorage.getItem('ds2api_token') || sessionStorage.getItem('ds2api_token') const expiresAt = parseInt(localStorage.getItem('ds2api_token_expires') || sessionStorage.getItem('ds2api_token_expires') || '0') if (storedToken && expiresAt > Date.now()) { try { const res = await fetch('/admin/verify', { headers: { 'Authorization': `Bearer ${storedToken}` } }) if (res.ok) { setToken(storedToken) } else { handleLogout() } } catch { setToken(storedToken) } } setAuthChecking(false) } checkAuth() }, [handleLogout, isAdminRoute, t]) return { token, authChecking, message, isAdminRoute, isVercel, showMessage, handleLogin, handleLogout, } }