import React, { useEffect, useState } from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; import { useAuth } from '../contexts/AuthContext'; import { AppBar, Toolbar, Typography, IconButton, Box, useTheme, Menu, MenuItem, ListItemIcon, ListItemText, Divider } from '@mui/material'; import MenuIcon from '@mui/icons-material/Menu'; import { Login as LoginIcon, Logout as LogoutIcon, School as TeacherIcon, Person as StudentIcon, Dashboard as TLDrawDevIcon, Build as DevToolsIcon, Groups as MultiplayerIcon, CalendarToday as CalendarIcon, Assignment as TeacherPlannerIcon, AssignmentTurnedIn as ExamMarkerIcon, Settings as SettingsIcon, Search as SearchIcon, AdminPanelSettings as AdminIcon } from '@mui/icons-material'; import { HEADER_HEIGHT } from './Layout'; import { logger } from '../debugConfig'; import { GraphNavigator } from '../components/navigation/GraphNavigator'; const Header: React.FC = () => { const theme = useTheme(); const navigate = useNavigate(); const location = useLocation(); const { user, signOut } = useAuth(); const [anchorEl, setAnchorEl] = useState(null); const [isAuthenticated, setIsAuthenticated] = useState(!!user); const isAdmin = user?.email === import.meta.env.VITE_SUPER_ADMIN_EMAIL; const showGraphNavigation = location.pathname === '/single-player'; // Update authentication state whenever user changes useEffect(() => { const newAuthState = !!user; setIsAuthenticated(newAuthState); logger.debug('user-context', '🔄 User state changed in header', { hasUser: newAuthState, userId: user?.id, userEmail: user?.email, userState: newAuthState ? 'logged-in' : 'logged-out', isAdmin }); }, [user, isAdmin]); const handleMenuOpen = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleMenuClose = () => { setAnchorEl(null); }; const handleNavigation = (path: string) => { navigate(path); handleMenuClose(); }; const handleSignupNavigation = (role: 'teacher' | 'student') => { navigate('/signup', { state: { role } }); handleMenuClose(); }; const handleSignOut = async () => { try { logger.debug('auth-service', '🔄 Signing out user', { userId: user?.id }); await signOut(); // Clear local state immediately setIsAuthenticated(false); setAnchorEl(null); logger.debug('auth-service', '✅ User signed out'); } catch (error) { logger.error('auth-service', '❌ Error signing out:', error); console.error('Error signing out:', error); } }; return ( navigate(isAuthenticated ? '/single-player' : '/')} > ClassroomCopilot {isAuthenticated ? [ // Development Tools Section handleNavigation('/tldraw-dev')}> , handleNavigation('/dev')}> , , // Main Features Section handleNavigation('/multiplayer')}> , handleNavigation('/calendar')}> , handleNavigation('/teacher-planner')}> , handleNavigation('/exam-marker')}> , , // Utilities Section handleNavigation('/settings')}> , handleNavigation('/search')}> , // Admin Section ...(isAdmin ? [ , handleNavigation('/admin')}> ] : []), // Authentication Section , ] : [ // Authentication Section for Non-authenticated Users handleNavigation('/login')}> , , handleSignupNavigation('teacher')}> , handleSignupNavigation('student')}> ]} ); }; export default Header;