import React, { useState } from "react" import { Link, useLocation } from "@tanstack/react-router" import { Home, Clock, Users, FolderKanban, Calendar, ShieldCheck, Sun, Moon, Settings, ListTree, Menu, X, Zap, CreditCard, Languages, LogOut, FileText } from "lucide-react" import { useQuery } from "@tanstack/react-query" import { api } from "../lib/api" import { useTheme } from "../lib/theme" import Avatar from "./Avatar" export default function Nav() { const location = useLocation() const { theme, toggleTheme } = useTheme() const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false) const [lang, setLang] = useState<'en' | 'de'>('en') const { data: user } = useQuery({ queryKey: ['me'], queryFn: api.getMe }) const navItems = [ { label: "Dashboard", to: "/", icon: Home }, { label: "Time Entries", to: "/time-entries", icon: Clock }, { label: "Calendar", to: "/calendar", icon: Calendar }, { label: "Customers", to: "/customers", icon: Users }, { label: "Projects", to: "/projects", icon: FolderKanban }, { label: "Invoices", to: "/invoices", icon: FileText }, { label: "Integrations", to: "/integrations", icon: Zap }, { label: "Billing", to: "/billing", icon: CreditCard }, ] const adminItems = [ { label: "Admin", to: "/admin", icon: ShieldCheck }, { label: "Audit Log", to: "/admin/audit-log", icon: ListTree }, { label: "Webhooks", to: "/admin/webhooks", icon: Zap }, ] const allItems = user?.role === 'admin' ? [...navItems, ...adminItems] : navItems const NavLink = ({ item }: { item: typeof navItems[0] }) => { const isActive = location.pathname === item.to const Icon = item.icon const baseClasses = "flex items-center gap-2 px-3 py-2 rounded-md text-sm font-medium transition-colors" const activeClasses = "bg-indigo-50 text-indigo-700 dark:bg-indigo-900/30 dark:text-indigo-300" const inactiveClasses = "text-gray-600 hover:bg-gray-50 hover:text-gray-900 dark:text-slate-400 dark:hover:bg-slate-800 dark:hover:text-slate-100" return ( setIsMobileMenuOpen(false)} aria-current={isActive ? 'page' : undefined} className={`${baseClasses} ${isActive ? activeClasses : inactiveClasses}`} > {item.label} ) } return ( EmberClone ⌘K {allItems.map((item) => ( ))} {theme === 'dark' ? : } setLang(lang === 'en' ? 'de' : 'en')} aria-label={`Switch language to ${lang === 'en' ? 'German' : 'English'}`} className="p-1.5 rounded-full text-gray-600 hover:bg-white dark:text-slate-400 dark:hover:bg-slate-700 transition-colors" > api.logout()} aria-label="Logout" className="p-1.5 rounded-full text-gray-600 hover:bg-white dark:text-slate-400 dark:hover:bg-slate-700 transition-colors" > ) }