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 } from "lucide-react" import { useQuery } from "@tanstack/react-query" import { api } from "../lib/api" import { useTheme } from "../lib/theme" 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: "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)} className={`${baseClasses} ${isActive ? activeClasses : inactiveClasses}`} > {item.label} ) } return ( EmberClone ⌘K {allItems.map((item) => ( ))} {theme === 'dark' ? : } setLang('en')} className={`px-2 py-1 text-[10px] font-bold rounded-full transition-all ${lang === 'en' ? 'bg-white dark:bg-slate-600 text-indigo-600 dark:text-white shadow-sm' : 'text-gray-500 dark:text-slate-400 hover:text-gray-700 dark:hover:text-slate-200'}`} > EN setLang('de')} className={`px-2 py-1 text-[10px] font-bold rounded-full transition-all ${lang === 'de' ? 'bg-white dark:bg-slate-600 text-indigo-600 dark:text-white shadow-sm' : 'text-gray-500 dark:text-slate-400 hover:text-gray-700 dark:hover:text-slate-200'}`} > DE setIsMobileMenuOpen(!isMobileMenuOpen)} className="md:hidden p-2 rounded-md text-gray-500 hover:bg-gray-100 dark:text-slate-400 dark:hover:bg-slate-800" > {isMobileMenuOpen ? : } {/* Mobile Menu */} {isMobileMenuOpen && ( {allItems.map((item) => ( ))} )} ) }