import React, { useState } from 'react';
import { Outlet } from 'react-router-dom';
import { Box, Container, AppBar, Toolbar, Typography, Button,
IconButton, Drawer, List, ListItem, ListItemIcon, ListItemText,
Divider, Badge, useMediaQuery } from '@mui/material';
import { useTheme } from '@mui/material/styles';
import MenuIcon from '@mui/icons-material/Menu';
import HomeIcon from '@mui/icons-material/Home';
import ShoppingCartIcon from '@mui/icons-material/ShoppingCart';
import CategoryIcon from '@mui/icons-material/Category';
import PersonIcon from '@mui/icons-material/Person';
import LoginIcon from '@mui/icons-material/Login';
import LogoutIcon from '@mui/icons-material/Logout';
import DashboardIcon from '@mui/icons-material/Dashboard';
import Brightness4Icon from '@mui/icons-material/Brightness4';
import Brightness7Icon from '@mui/icons-material/Brightness7';
import ReceiptIcon from '@mui/icons-material/Receipt';
import BookIcon from '@mui/icons-material/Book';
import { Link as RouterLink, useNavigate } from 'react-router-dom';
import { useAuth, useCart, useDarkMode } from '../hooks/reduxHooks';
import Footer from '../components/Footer';
import { useQuery } from '@tanstack/react-query';
import apiClient from '@services/api';
import useBrandingSettings from '@hooks/brandingHooks';
import imageUtils from '@utils/imageUtils';
const MainLayout = () => {
const [drawerOpen, setDrawerOpen] = useState(false);
const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down('md'));
const navigate = useNavigate();
const { isAuthenticated, isAdmin, logout } = useAuth();
const { itemCount } = useCart();
const [darkMode, toggleDarkMode] = useDarkMode();
const { data: brandingSettings } = useBrandingSettings();
const siteName = brandingSettings?.site_name || 'Rocks, Bones & Sticks';
const logoUrl = imageUtils.getImageUrl(brandingSettings?.logo_url)
const handleDrawerToggle = () => {
setDrawerOpen(!drawerOpen);
};
const handleLogout = () => {
logout();
navigate('/');
};
let mainMenu = [
{ text: 'Home', icon: , path: '/' },
{ text: 'Products', icon: , path: '/products' },
{ text: 'Blog', icon: , path: '/blog' },
{ text: 'Cart', icon: , path: '/cart', badge: itemCount > 0 ? itemCount : null },
];
if (isAuthenticated) {
mainMenu.push(
{ text: 'My Orders', icon: , path: '/account/orders' }
);
}
const authMenu = isAuthenticated ?
[
{ text: 'Logout', icon: , onClick: handleLogout }
] : [
{ text: 'Login', icon: , path: '/auth/login' },
{ text: 'Register', icon: , path: '/auth/register' }
];
// Add admin menu if user is admin
if (isAuthenticated && isAdmin) {
mainMenu.push(
{ text: 'Admin Dashboard', icon: , path: '/admin' }
);
}
const drawer = (
{logoUrl ? (
) : (
{siteName}
)}
{mainMenu.map((item) => (
{item.badge ? (
{item.icon}
) : (
item.icon
)}
))}
{darkMode ? : }
{authMenu.map((item) => (
{item.icon}
))}
);
return (
{logoUrl ? (
) : (
{siteName}
)}
{/* Desktop navigation */}
{!isMobile && (
{mainMenu.map((item) => (
))}
{darkMode ? : }
{authMenu.map((item) => (
item.path ? (
) : (
)
))}
)}
{drawer}
);
};
export default MainLayout;