"use client"; import { Home, Search, Library, Plus, Heart, RefreshCcw } from "lucide-react"; import Link from "next/link"; import { usePlayer } from "@/context/PlayerContext"; import { useState } from "react"; import CreatePlaylistModal from "./CreatePlaylistModal"; import { dbService } from "@/services/db"; import { useLibrary } from "@/context/LibraryContext"; import Logo from "./Logo"; import CoverImage from "./CoverImage"; export default function Sidebar() { const { likedTracks } = usePlayer(); const { userPlaylists, libraryItems, refreshLibrary: refresh, activeFilter, setActiveFilter } = useLibrary(); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const [isUpdating, setIsUpdating] = useState(false); const [updateStatus, setUpdateStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle'); const handleCreatePlaylist = async (name: string) => { await dbService.createPlaylist(name); refresh(); }; const handleDeletePlaylist = async (e: React.MouseEvent, id: string) => { e.preventDefault(); e.stopPropagation(); if (confirm("Delete this playlist?")) { await dbService.deletePlaylist(id); refresh(); } }; const handleUpdateYtdlp = async () => { if (isUpdating) return; setIsUpdating(true); setUpdateStatus('loading'); try { const response = await fetch('/api/system/update-ytdlp', { method: 'POST' }); if (response.ok) { setUpdateStatus('success'); setTimeout(() => setUpdateStatus('idle'), 5000); } else { setUpdateStatus('error'); } } catch (error) { console.error("Failed to update yt-dlp:", error); setUpdateStatus('error'); } finally { setIsUpdating(false); } }; // Filtering Logic const showPlaylists = activeFilter === 'all' || activeFilter === 'playlists'; const showArtists = activeFilter === 'all' || activeFilter === 'artists'; const showAlbums = activeFilter === 'all' || activeFilter === 'albums'; const artists = libraryItems.filter(i => i.type === 'Artist'); const albums = libraryItems.filter(i => i.type === 'Album'); const browsePlaylists = libraryItems.filter(i => i.type === 'Playlist'); return ( ); }