'use client' import { useState, useEffect, useCallback } from 'react' import { useRouter } from 'next/navigation'; import Image from 'next/image'; import { Dialog, DialogPanel, Disclosure, DisclosureButton, DisclosurePanel, Popover, PopoverButton, PopoverGroup, PopoverPanel, } from '@headlessui/react' import { Bars3Icon, ShoppingBagIcon, UsersIcon, HomeIcon, UserCircleIcon, XMarkIcon, ArrowRightOnRectangleIcon, MoonIcon, SunIcon } from '@heroicons/react/24/outline' import { ChevronDownIcon } from '@heroicons/react/20/solid' import useAuthStore from '../../store/authStore'; import { Avatar } from '../avatar'; import LanguageSwitcher from '../LanguageSwitcher'; const products = [ { name: 'Shop', description: 'Browse our exclusive product catalog', href: '/shop', icon: ShoppingBagIcon, }, { name: 'Community', description: 'Connect with other members', href: '/community', icon: UsersIcon, }, { name: 'Dashboard', description: 'Manage your account and activities', href: '/dashboard', icon: HomeIcon }, ] export default function Header() { const [mobileMenuOpen, setMobileMenuOpen] = useState(false) const [isDark, setIsDark] = useState(false) const user = useAuthStore((s) => s.user); const logout = useAuthStore((s) => s.logout); const router = useRouter(); const handleLogout = async () => { try { await logout(); router.push('/login'); } catch (err) { console.error('Logout failed:', err); } }; // Helper to get user initials for profile icon const getUserInitials = () => { if (!user) return 'U'; if (user.firstName || user.lastName) { return ( (user.firstName?.[0] || '') + (user.lastName?.[0] || '') ).toUpperCase(); } if (user.email) { return user.email[0].toUpperCase(); } return 'U'; }; // Theme initialization & persistence useEffect(() => { const stored = localStorage.getItem('theme') if (stored === 'dark' || (!stored && window.matchMedia('(prefers-color-scheme: dark)').matches)) { document.documentElement.classList.add('dark') setIsDark(true) } else { document.documentElement.classList.remove('dark') setIsDark(false) } }, []) const toggleTheme = useCallback(() => { setIsDark(prev => { const next = !prev if (next) { document.documentElement.classList.add('dark') localStorage.setItem('theme', 'dark') } else { document.documentElement.classList.remove('dark') localStorage.setItem('theme', 'light') } return next }) }, []) return (
{/* Insert theme toggle in mobile */}
{user ? ( <>
Navigation {products.map((item) => ( { router.push(item.href); setMobileMenuOpen(false); }} className="block rounded-lg py-2 pr-3 pl-6 text-sm/7 font-semibold text-gray-900 dark:text-white hover:bg-white/5 w-full text-left" > {item.name} ))}
{user?.firstName && user?.lastName ? `${user.firstName} ${user.lastName}` : user?.email || 'User' }
{user?.email || 'user@example.com'}
Language
) : (
Language
)}
) }