'use client' import React, { useState, useEffect } from 'react' import { AppBar, Box, Toolbar, IconButton, Typography, Menu, Container, Avatar, Button, Tooltip, MenuItem, Drawer, List, ListItem, ListItemButton, ListItemIcon, ListItemText, useMediaQuery, useTheme, } from '@mui/material' import { Menu as MenuIcon, MenuBook, Favorite as Prayer, Search, AccountCircle, Home, Settings, Logout, Login, Bookmark, CalendarToday, } from '@mui/icons-material' import { useRouter } from 'next/navigation' import { useTranslations, useLocale } from 'next-intl' import { LanguageSwitcher } from './language-switcher' import { useAuth } from '@/hooks/use-auth' interface DynamicPage { id: string title: string slug: string showInNavigation: boolean navigationOrder?: number } export function Navigation() { const [anchorElNav, setAnchorElNav] = useState(null) const [anchorElUser, setAnchorElUser] = useState(null) const [drawerOpen, setDrawerOpen] = useState(false) const [dynamicPages, setDynamicPages] = useState([]) const router = useRouter() const theme = useTheme() const isMobile = useMediaQuery(theme.breakpoints.down('md')) const t = useTranslations('navigation') const locale = useLocale() const { user, isAuthenticated, logout } = useAuth() useEffect(() => { fetchDynamicPages() }, []) const fetchDynamicPages = async () => { try { const response = await fetch('/api/pages?location=navigation') if (response.ok) { const data = await response.json() setDynamicPages(data.data || []) } } catch (error) { console.error('Failed to fetch dynamic pages:', error) } } const basePages = [ { name: t('home'), path: '/', icon: }, { name: t('bible'), path: '/bible', icon: }, // DISABLED: Prayer Wall Feature // { name: t('prayers'), path: '/prayers', icon: }, { name: t('search'), path: '/search', icon: }, ] const dynamicNavPages = dynamicPages.map(page => ({ name: page.title, path: `/pages/${page.slug}`, icon: null })) const pages = [...basePages, ...dynamicNavPages] const authenticatedPages = [ ...pages, { name: t('bookmarks'), path: '/bookmarks', icon: }, { name: t('readingPlans'), path: '/reading-plans', icon: }, ] const settings = [ { name: t('bookmarks'), icon: , action: 'bookmarks' }, { name: t('profile'), icon: , action: 'profile' }, { name: t('settings'), icon: , action: 'settings' }, { name: t('logout'), icon: , action: 'logout' }, ] const handleOpenNavMenu = (event: React.MouseEvent) => { setAnchorElNav(event.currentTarget) } const handleOpenUserMenu = (event: React.MouseEvent) => { setAnchorElUser(event.currentTarget) } const handleCloseNavMenu = () => { setAnchorElNav(null) } const handleCloseUserMenu = () => { setAnchorElUser(null) } const handleNavigate = (path: string) => { const localizedPath = `/${locale}${path === '/' ? '' : path}` router.push(localizedPath) handleCloseNavMenu() setDrawerOpen(false) } const handleUserMenuAction = (action: string) => { handleCloseUserMenu() switch (action) { case 'bookmarks': router.push(`/${locale}/bookmarks`) break case 'profile': router.push(`/${locale}/profile`) break case 'settings': router.push(`/${locale}/settings`) break case 'logout': logout() router.push(`/${locale}`) break default: break } } const handleLogin = () => { router.push(`/${locale}/auth/login`) } const toggleDrawer = (open: boolean) => { setDrawerOpen(open) } const DrawerList = ( {(isAuthenticated ? authenticatedPages : pages).map((page) => ( handleNavigate(page.path)}> {page.icon} ))} ) return ( <> {/* Desktop Logo */} BIBLICAL GUIDE {/* Mobile Menu */} toggleDrawer(true)} color="inherit" > {/* Mobile Logo */} BIBLICAL {/* Desktop Menu */} {(isAuthenticated ? authenticatedPages : pages).map((page) => ( ))} {/* Language Switcher */} {/* User Menu */} {isAuthenticated ? ( <> {user?.name ? user.name.charAt(0).toUpperCase() : } {user?.name || user?.email} {settings.map((setting) => ( handleUserMenuAction(setting.action)}> {setting.icon} {setting.name} ))} ) : ( )} {/* Mobile Drawer */} toggleDrawer(false)}> {DrawerList} ) }