'use client'; import { useState, useEffect } from 'react'; import { Box, Container, Chip, Tooltip, IconButton, Menu, MenuItem, ListItemIcon, ListItemText, Avatar, Divider, } from '@mui/material'; import { MobileNav } from '../MobileNav/MobileNav'; import { TabBar } from '../TabBar/TabBar'; import { useMediaQuery } from '@/hooks/useMediaQuery'; import { ReactNode } from 'react'; import { useWebSocket } from '@/hooks/useWebSocket'; import { Wifi, WifiOff, People, AccountCircle, Settings, ChildCare, Group, Logout, Gavel } from '@mui/icons-material'; import { useTranslation } from '@/hooks/useTranslation'; import { useRouter } from 'next/navigation'; import { useAuth } from '@/lib/auth/AuthContext'; interface AppShellProps { children: ReactNode; } export const AppShell = ({ children }: AppShellProps) => { const { t } = useTranslation('common'); const router = useRouter(); const { user, logout } = useAuth(); const isMobile = useMediaQuery('(max-width: 768px)'); const isTablet = useMediaQuery('(max-width: 1024px)'); const { isConnected, presence } = useWebSocket(); const [anchorEl, setAnchorEl] = useState(null); // Debug: Log user photo changes useEffect(() => { console.log('👤 User updated in AppShell:', { name: user?.name, hasPhoto: !!user?.photoUrl, photoPreview: user?.photoUrl?.substring(0, 50) }); }, [user?.photoUrl]); const handleMenuOpen = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleMenuClose = () => { setAnchorEl(null); }; const handleNavigate = (path: string) => { handleMenuClose(); router.push(path); }; const handleLogout = async () => { handleMenuClose(); await logout(); router.push('/login'); }; return ( {/* Header Bar - Both Mobile and Desktop */} {/* Left Side - Family Members Online Indicator */} {isConnected && presence.count > 1 && ( } label={presence.count} size="small" color="primary" sx={{ fontWeight: 600, }} /> )} {/* Right Side - User Menu Button with Status Indicator */} { console.error('Avatar image failed to load:', user?.photoUrl?.substring(0, 50)); e.target.style.display = 'none'; // Hide broken image, show fallback } }} > {user?.name?.charAt(0).toUpperCase() || 'U'} {/* Status Dot Indicator */} handleNavigate('/settings')}> {t('navigation.settings')} handleNavigate('/children')}> {t('navigation.children')} handleNavigate('/family')}> {t('navigation.family')} handleNavigate('/legal/privacy')}> Legal & Privacy {t('navigation.logout')} {children} ); };