import { useEffect, useState } from "react"; import { Link, useLocation, useNavigate } from "react-router-dom"; import { api } from "../api.js"; import { clearSession, getToken, getUser, setSession } from "../utils/auth.js"; import AuthModal from "./AuthModal.jsx"; const NAV = [ { to: "/home", label: "Home" }, { to: "/browse", label: "Browse" }, { to: "/schedule", label: "Schedule" }, { to: "/movies", label: "Movies & TV" }, { to: "/manga", label: "Manga" }, { to: "/music", label: "Music" }, ]; export default function Header() { const [scrolled, setScrolled] = useState(false); const [q, setQ] = useState(""); const [user, setUser] = useState(() => getUser()); const [menuOpen, setMenuOpen] = useState(false); const [modalOpen, setModalOpen] = useState(false); const location = useLocation(); const navigate = useNavigate(); useEffect(() => { const fn = () => setScrolled(window.scrollY > 8); window.addEventListener("scroll", fn, { passive: true }); return () => window.removeEventListener("scroll", fn); }, []); // Hydrate a stored token into the full user profile on load. useEffect(() => { if (getToken() && !getUser()) { api .authMe() .then((u) => setSession(getToken(), u)) .then(() => setUser(getUser())) .catch(() => clearSession()); } }, []); // Close the dropdown when clicking outside / navigating. useEffect(() => setMenuOpen(false), [location.pathname]); useEffect(() => { if (!menuOpen) return; const close = (e) => { if (!e.target.closest?.(".auth-nav")) setMenuOpen(false); }; document.addEventListener("click", close); return () => document.removeEventListener("click", close); }, [menuOpen]); useEffect(() => { const openAuth = () => { setMenuOpen(false); setModalOpen(true); }; window.addEventListener("open-auth-modal", openAuth); return () => window.removeEventListener("open-auth-modal", openAuth); }, []); function handleSearch(e) { e.preventDefault(); if (q.trim()) navigate(`/search?q=${encodeURIComponent(q.trim())}`); } async function handleLogout() { try { await api.authLogout(); } catch { /* token already invalid — clear locally anyway */ } clearSession(); setUser(null); setMenuOpen(false); } return ( ); }