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 */}
>
);
}