/* Auth state helpers shared across all pages */ const Auth = (() => { const KEY = 'bb_token'; const USER_KEY = 'bb_user'; function getToken() { return localStorage.getItem(KEY); } function saveToken(token) { localStorage.setItem(KEY, token); } function getUser() { const raw = localStorage.getItem(USER_KEY); return raw ? JSON.parse(raw) : null; } function saveUser(user) { localStorage.setItem(USER_KEY, JSON.stringify(user)); } function logout() { localStorage.removeItem(KEY); localStorage.removeItem(USER_KEY); window.location.href = '/index.html'; } function isLoggedIn() { return !!getToken(); } /* Redirect to login if not authenticated */ function requireAuth() { if (!isLoggedIn()) { window.location.href = '/login.html'; return false; } return true; } /* Redirect away from auth pages if already logged in */ function redirectIfLoggedIn() { if (isLoggedIn()) { window.location.href = '/dashboard.html'; } } /* Render the nav user area; call after DOM ready */ async function renderNav(activePage) { const navLinksEl = document.getElementById('nav-links'); const navUserEl = document.getElementById('nav-user'); if (!navLinksEl || !navUserEl) return; if (isLoggedIn()) { let user = getUser(); if (!user) { try { user = await API.users.me(); saveUser(user); } catch (_) {} } navLinksEl.innerHTML = ` My Bottle Log Entry `; navUserEl.innerHTML = ` ${user?.display_name || user?.email || 'Account'} Logout `; document.getElementById('logout-btn')?.addEventListener('click', (e) => { e.preventDefault(); logout(); }); } else { navLinksEl.innerHTML = ''; navUserEl.innerHTML = `Login`; } } return { getToken, saveToken, getUser, saveUser, logout, isLoggedIn, requireAuth, redirectIfLoggedIn, renderNav }; })();