import { API_BASE } from '@/lib/api'; let hasPrimedSessionHint = false; function takeLegacyAdminKey(): string { if (typeof window === 'undefined') return ''; const sessionValue = sessionStorage.getItem('sb_admin_key') || ''; const legacyValue = localStorage.getItem('sb_admin_key') || ''; const candidate = sessionValue || legacyValue; try { sessionStorage.removeItem('sb_admin_key'); localStorage.removeItem('sb_admin_key'); } catch { /* ignore */ } return candidate; } export async function hasAdminSession(): Promise { try { const existing = await fetch(`${API_BASE}/api/admin/session`, { cache: 'no-store' }); const existingData = await existing.json().catch(() => ({})); return Boolean(existing.ok && existingData?.hasSession); } catch { return false; } } export async function primeAdminSession(adminKey?: string): Promise { if (!adminKey) { if (await hasAdminSession()) return; } const candidate = String(adminKey || takeLegacyAdminKey() || '').trim(); if (!candidate) throw new Error('admin_session_required'); if (hasPrimedSessionHint && (await hasAdminSession())) return; const res = await fetch(`${API_BASE}/api/admin/session`, { method: 'POST', cache: 'no-store', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ adminKey: candidate }), }); const data = await res.json().catch(() => ({})); if (!res.ok || data?.ok === false) { throw new Error(data?.detail || data?.message || 'admin_session_failed'); } hasPrimedSessionHint = true; } export async function clearAdminSession(): Promise { hasPrimedSessionHint = false; if (typeof window !== 'undefined') { try { sessionStorage.removeItem('sb_admin_key'); localStorage.removeItem('sb_admin_key'); } catch { /* ignore */ } } await fetch(`${API_BASE}/api/admin/session`, { method: 'DELETE', cache: 'no-store', }).catch(() => null); }