'use client'; import React from 'react'; import { ContextMenu, ContextMenuContent, ContextMenuItem, ContextMenuSeparator, ContextMenuTrigger, } from "@/components/ui/context-menu"; import { Play, Plus, ListMusic, Heart, SkipForward, UserIcon, Disc3, Star, Share, Info } from 'lucide-react'; import { useAudioPlayer } from '@/app/components/AudioPlayerContext'; import { Track } from '@/app/components/AudioPlayerContext'; interface TrackContextMenuProps { children: React.ReactNode; track: Track; showPlayOptions?: boolean; showQueueOptions?: boolean; showFavoriteOption?: boolean; showAlbumArtistOptions?: boolean; } export function TrackContextMenu({ children, track, showPlayOptions = true, showQueueOptions = true, showFavoriteOption = true, showAlbumArtistOptions = true }: TrackContextMenuProps) { const { playTrack, addToQueue, insertAtBeginningOfQueue, toggleCurrentTrackStar, currentTrack, queue } = useAudioPlayer(); const handlePlayTrack = () => { playTrack(track, true); }; const handleAddToQueue = () => { addToQueue(track); }; const handlePlayNext = () => { // Add track to the beginning of the queue to play next insertAtBeginningOfQueue(track); }; const handleToggleFavorite = () => { if (currentTrack?.id === track.id) { toggleCurrentTrackStar(); } // For non-current tracks, we'd need a separate function to toggle favorites }; return ( {children} {showPlayOptions && ( <> Play Now )} {showQueueOptions && ( <> Play Next Add to Queue )} {showFavoriteOption && ( <> {track.starred ? 'Remove from Favorites' : 'Add to Favorites'} )} {showAlbumArtistOptions && ( <> Go to Album Go to Artist )} Track Info Share ); } // Additional context menus for albums and artists interface AlbumContextMenuProps { children: React.ReactNode; albumId: string; albumName: string; } export function AlbumContextMenu({ children, albumId, albumName }: AlbumContextMenuProps) { const { playAlbum, addAlbumToQueue } = useAudioPlayer(); const handlePlayAlbum = () => { playAlbum(albumId); }; const handleAddAlbumToQueue = () => { addAlbumToQueue(albumId); }; return ( {children} Play Album Add Album to Queue Play Album Next Add to Favorites Go to Artist Album Info Share Album ); } interface ArtistContextMenuProps { children: React.ReactNode; artistId: string; artistName: string; } export function ArtistContextMenu({ children, artistId, artistName }: ArtistContextMenuProps) { const { playArtist, addArtistToQueue } = useAudioPlayer(); const handlePlayArtist = () => { playArtist(artistId); }; const handleAddArtistToQueue = () => { addArtistToQueue(artistId); }; return ( {children} Play All Songs Add All to Queue Play All Next Add to Favorites Artist Info Share Artist ); }