import { NavLink } from "react-router-dom"; import { useState } from "react"; import { LayoutDashboard, FlaskConical, BookOpen, BarChart3, Settings, Users, FileText, ChevronDown, ListChecks, CheckCircle, Database, Crosshair, Zap, Grid3X3, Gauge, ShieldCheck, GitCompareArrows, ScrollText, } from "lucide-react"; import { useAuth } from "../context/AuthContext"; interface NavItem { to: string; label: string; icon: React.FC<{ className?: string }>; /** Roles allowed to see this item. undefined = everyone. */ roles?: string[]; children?: NavItem[]; } const mainLinks: NavItem[] = [ { to: "/dashboard", label: "Dashboard", icon: LayoutDashboard }, { to: "/executive-dashboard", label: "Executive Dashboard", icon: Gauge, roles: ["admin", "red_lead", "blue_lead", "viewer"] }, { to: "/matrix", label: "ATT&CK Matrix", icon: Grid3X3 }, { to: "/tests", label: "Tests", icon: FlaskConical, children: [ { to: "/tests", label: "All Tests", icon: ListChecks }, { to: "/tests/validated", label: "Validated Tests", icon: CheckCircle }, { to: "/test-catalog", label: "Test Catalog", icon: BookOpen }, ], }, { to: "/campaigns", label: "Campaigns", icon: Zap }, { to: "/threat-actors", label: "Threat Actors", icon: Crosshair }, { to: "/compliance", label: "Compliance", icon: ShieldCheck }, { to: "/comparison", label: "Comparison", icon: GitCompareArrows, roles: ["admin", "red_lead", "blue_lead", "viewer"] }, { to: "/reports", label: "Reports", icon: BarChart3 }, { to: "/settings", label: "Settings", icon: Settings }, ]; const systemLinks: NavItem[] = [ { to: "/data-sources", label: "Data Sources", icon: Database }, { to: "/system", label: "MITRE Sync", icon: ScrollText }, { to: "/users", label: "Users", icon: Users }, { to: "/audit", label: "Audit Log", icon: FileText }, ]; function SidebarLink({ item }: { item: NavItem }) { const [expanded, setExpanded] = useState(false); if (item.children) { return (