"use client"; import { Box, Flex, HStack, IconButton, Link as ChakraLink, Stack, VStack, Button, MenuItem, ClientOnly, } from "@chakra-ui/react"; import { Link, useRouter } from "@/i18n/navigation"; import { ColorModeButton } from "@/components/ui/color-mode"; import { PopoverBody, PopoverContent, PopoverRoot, PopoverTrigger, } from "@/components/ui/overlays/popover"; import { RxHamburgerMenu } from "react-icons/rx"; import { NAV_ITEMS } from "@/config/navigation"; import HeaderLink from "./header-link"; import MobileHeaderLink from "./mobile-header-link"; import LocaleSwitcher from "@/components/ui/locale-switcher"; import { useEffect, useState } from "react"; import { useTranslations } from "next-intl"; import { MenuContent, MenuRoot, MenuTrigger, } from "@/components/ui/overlays/menu"; import { Avatar } from "@/components/ui/data-display/avatar"; import { Skeleton } from "@/components/ui/feedback/skeleton"; import { signOut, useSession } from "next-auth/react"; import { authConfig } from "@/config/auth"; import { LoginModal } from "@/components/auth/login-modal"; import { LuLogIn } from "react-icons/lu"; export default function Header() { const t = useTranslations(); const [isSticky, setIsSticky] = useState(false); const [loginModalOpen, setLoginModalOpen] = useState(false); const router = useRouter(); const { data: session, status } = useSession(); const isAuthenticated = !!session; const isLoading = status === "loading"; useEffect(() => { const handleScroll = () => { setIsSticky(window.scrollY >= 10); }; window.addEventListener("scroll", handleScroll); return () => { window.removeEventListener("scroll", handleScroll); }; }, []); const handleLogout = async () => { await signOut({ redirect: false }); if (authConfig.isAuthRequired) { router.replace("/signin"); } }; // Render user menu or login button based on auth state const renderAuthSection = () => { if (isLoading) { return ; } if (isAuthenticated) { return ( {t("auth.sign-out")} ); } // Not authenticated - show login button return ( ); }; // Render mobile auth section const renderMobileAuthSection = () => { if (isLoading) { return ; } if (isAuthenticated) { return ( <> ); } return ( ); }; return ( <> {/* Logo */} {"Game Calendar"} {/* DESKTOP NAVIGATION */} {NAV_ITEMS.map((item, index) => ( ))} }> {renderAuthSection()} {/* MOBILE NAVIGATION */} }> {NAV_ITEMS.map((item) => ( ))} {renderMobileAuthSection()} {/* Login Modal */} ); }