import React, { useEffect, useState } from 'react'; import { useNavigate, useLocation } from 'react-router-dom'; import { useAuth } from '../contexts/AuthContext'; import { AppBar, Toolbar, Typography, IconButton, Box, Chip, useTheme, Menu, MenuItem, ListItemIcon, ListItemText, Divider } from '@mui/material'; import MenuIcon from '@mui/icons-material/Menu'; import Login from '@mui/icons-material/Login'; import Logout from '@mui/icons-material/Logout'; import Teacher from '@mui/icons-material/School'; import Student from '@mui/icons-material/Person'; import Calendar from '@mui/icons-material/CalendarToday'; import TeacherPlanner from '@mui/icons-material/Assignment'; import ExamMarker from '@mui/icons-material/AssignmentTurnedIn'; import Settings from '@mui/icons-material/Settings'; import Search from '@mui/icons-material/Search'; import Admin from '@mui/icons-material/AdminPanelSettings'; import Home from '@mui/icons-material/Home'; import Schedule from '@mui/icons-material/Schedule'; import Class from '@mui/icons-material/Class'; import Book from '@mui/icons-material/Book'; import Enrollment from '@mui/icons-material/HowToReg'; import Lessons from '@mui/icons-material/EventNote'; import LessonPlans from '@mui/icons-material/LibraryBooks'; import People from '@mui/icons-material/People'; import SchoolSettings from '@mui/icons-material/Tune'; 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, bootstrapData } = useAuth(); const [anchorEl, setAnchorEl] = useState(null); const [isAuthenticated, setIsAuthenticated] = useState(!!user); const showGraphNavigation = location.pathname === '/single-player'; const isPlatformAdmin = bootstrapData?.permissions?.platform_admin ?? false; const schoolRole = bootstrapData?.active_institute?.membership_role ?? null; const isSchoolAdmin = schoolRole === 'school_admin' || schoolRole === 'department_head'; useEffect(() => { setIsAuthenticated(!!user); }, [user]); 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(); 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 ( {showGraphNavigation && ( )} handleNavigation('/')} > Classroom Copilot {isAuthenticated && bootstrapData?.onboarding?.next_step && bootstrapData.onboarding.next_step !== 'ready' && ( navigate('/dashboard')} sx={{ cursor: 'pointer', display: { xs: 'none', sm: 'flex' } }} /> )} {isAuthenticated && ( {user?.email} )} Navigation {isAuthenticated ? [ // Home handleNavigation('/')}> , , // My Work Section My Work , handleNavigation('/my-classes')}> , handleNavigation('/my-lessons')}> , handleNavigation('/lesson-plans')}> , , // School Admin Section ...(isSchoolAdmin ? [ School Admin , handleNavigation('/school-settings')}> , handleNavigation('/staff-manager')}> , handleNavigation('/student-manager')}> , , ] : []), // Platform Admin Section ...(isPlatformAdmin ? [ , Administration , handleNavigation('/admin')}> ] : []), ] : [ // Authentication Section for Non-authenticated Users handleNavigation('/login')}> , , handleSignupNavigation('teacher')}> , handleSignupNavigation('student')}> ]} ); }; export default Header;