import { useState } from 'react'; import { NavLink, useLocation, useNavigate } from 'react-router-dom'; import { LayoutDashboard, Library, Users, FolderKanban, Database, Settings, Sun, LogOut, Menu, X, Plus, Film, Tv, Gamepad2, Heart, Eye, Flame, Clock, ChevronRight } from 'lucide-react'; import { cn } from '@/lib/utils'; import { useTheme } from '@/contexts/ThemeContext'; import { MediaCategory } from '@/types'; interface SidebarProps { enabledCategories: MediaCategory[]; onToggleCategory: (category: MediaCategory) => void; pageTitle?: string; mediaCounts?: { all: number; movies: number; series: number; games: number; adult: number; favorites: number; }; activeFilter?: string; onFilterChange?: (filter: string) => void; } export default function Sidebar({ enabledCategories, onToggleCategory, pageTitle, mediaCounts = { all: 24, movies: 8, series: 6, games: 6, adult: 4, favorites: 11 }, activeFilter = 'all', onFilterChange }: SidebarProps) { const [isMobileOpen, setIsMobileOpen] = useState(false); const { theme, setTheme } = useTheme(); const location = useLocation(); const navigate = useNavigate(); const toggleTheme = () => { setTheme(theme === 'dark' ? 'light' : 'dark'); }; const handleLogout = () => { console.log('Logout clicked'); }; const handleFilterClick = (filter: string) => { onFilterChange?.(filter); if (filter === 'all') { navigate('/browse'); } else if (filter === 'movies') { navigate('/movies'); } else if (filter === 'series') { navigate('/tv-series'); } else if (filter === 'games') { navigate('/games'); } else if (filter === 'adult') { navigate('/adult'); } else if (filter === 'favorites') { navigate('/browse?favorites=true'); } }; const handleQuickFilter = (filter: string) => { if (filter === 'most-played') { navigate('/browse?sort=plays'); } else if (filter === 'recently-added') { navigate('/browse?sort=recent'); } }; const isActive = (path: string) => { if (path === '/') return location.pathname === '/'; return location.pathname.startsWith(path); }; return ( <> {/* Mobile menu button */} {/* Overlay for mobile */} {isMobileOpen && (
setIsMobileOpen(false)} /> )} {/* Sidebar */} ); }