import React, { useEffect, useState } from "react";
import AppBar from "@mui/material/AppBar";
import Toolbar from "@mui/material/Toolbar";
import Typography from "@mui/material/Typography";
import Button from "@mui/material/Button";
import Box from "@mui/material/Box";
import Menu from "@mui/material/Menu";
import MenuItem from "@mui/material/MenuItem";
import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';
import {
Dialog, DialogTitle, DialogContent, DialogContentText, DialogActions, ListItemText
} from "@mui/material";
import MemoryIcon from '@mui/icons-material/Memory';
import DeveloperBoardIcon from '@mui/icons-material/DeveloperBoard';
import StorageIcon from '@mui/icons-material/Storage';
import SdStorageIcon from '@mui/icons-material/SdStorage';
import RouterIcon from '@mui/icons-material/Router';
import LanIcon from '@mui/icons-material/Lan';
import SpeakerIcon from '@mui/icons-material/Speaker';
import AlbumIcon from '@mui/icons-material/Album';
import SdCardIcon from '@mui/icons-material/SdCard';
import CableIcon from '@mui/icons-material/Cable';
import LogoUrl from '../assets/projectlogo.png';
import { onGetAuthState } from "../pages/+Layout.telefunc";
import ComponentDialog from "./ComponentDialog";
type AuthState = { isLoggedIn: boolean; username: string | null; isAdmin?: boolean };
const COMPONENT_CATEGORIES = [
{ id: 'cpu', label: 'Processors', icon: },
{ id: 'gpu', label: 'Graphics Cards', icon: },
{ id: 'motherboard', label: 'Motherboards', icon: },
{ id: 'memory', label: 'Memory (RAM)', icon: },
{ id: 'storage', label: 'Storage', icon: },
{ id: 'case', label: 'Cases', icon: },
{ id: 'power_supply', label: 'Power Supplies', icon: },
{ id: 'cooler', label: 'Cooling', icon: },
// Peripherals / Accessories (Missing ones)
{ id: 'network_adapter', label: 'Network Adapters (WiFi)', icon: },
{ id: 'network_card', label: 'Network Cards (Ethernet)', icon: },
{ id: 'sound_card', label: 'Sound Cards', icon: },
{ id: 'optical_drive', label: 'Optical Drives', icon: },
{ id: 'memory_card', label: 'Memory Cards', icon: },
{ id: 'cables', label: 'Cables', icon: },
];
export default function Navbar() {
const [auth, setAuth] = useState(null);
const [openLogoutDialog, setOpenLogoutDialog] = useState(false);
const [anchorEl, setAnchorEl] = useState(null);
const openMenu = Boolean(anchorEl);
const [browserOpen, setBrowserOpen] = useState(false);
const [selectedCategory, setSelectedCategory] = useState(null);
const handleComponentsClick = (event: React.MouseEvent) => {
setAnchorEl(event.currentTarget);
};
const handleMenuClose = () => {
setAnchorEl(null);
};
const handleCategorySelect = (categoryId: string) => {
setSelectedCategory(categoryId);
setBrowserOpen(true);
handleMenuClose();
};
const handleLogoutClick = (e: React.MouseEvent) => {
e.preventDefault();
setOpenLogoutDialog(true);
};
const confirmLogout = async () => {
setAuth({ isLoggedIn: false, username: null, isAdmin: false });
setOpenLogoutDialog(false);
const csrfRes = await fetch("/api/auth/csrf");
const { csrfToken } = await csrfRes.json();
await fetch("/api/auth/signout", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({ csrfToken: csrfToken, callbackUrl: "/" }),
});
window.location.href = "/";
};
useEffect(() => {
let active = true;
onGetAuthState()
.then((data) => active && setAuth({
isLoggedIn: data.isLoggedIn,
username: data.username,
isAdmin: data.isAdmin
}))
.catch(() => active && setAuth({ isLoggedIn: false, username: null, isAdmin: false }));
return () => { active = false; };
}, []);
const checkDashboardUrl = auth?.isAdmin ? '/dashboard/admin' : '/dashboard/user';
const onHoverNav = {
color: 'inherit',
'&:hover': { backgroundColor: '#ff8201', color: 'white', fontWeight: 'bold' }
};
return (
<>
window.location.href='/'} />
PC Forge
}
sx={onHoverNav}
>
Components
{auth?.isLoggedIn ? (
<>
>
) : (
<>
>
)}
setBrowserOpen(false)}
/>
>
);
}