'use client' import { useState } from 'react' import Image from 'next/image' import { Play, Trash2, ListPlus, ArrowRight, CheckSquare } from 'lucide-react' interface Song { id: string youtubeId: string title: string channelName: string thumbnail: string duration: number playlists?: Playlist[] } interface Playlist { id: string name: string } interface SongCardProps { song: Song onPlay: (song: Song) => void onDelete: (songId: string) => void playlists?: Playlist[] onAddToPlaylist?: (songId: string, playlistId: string) => void currentPlaylistId?: string onMoveToPlaylist?: (songId: string, fromPlaylistId: string, toPlaylistId: string) => void isSelectionMode?: boolean isSelected?: boolean onToggleSelection?: (songId: string) => void } function formatDuration(seconds: number): string { const mins = Math.floor(seconds / 60) const secs = seconds % 60 return `${mins}:${secs.toString().padStart(2, '0')}` } export default function SongCard({ song, onPlay, onDelete, playlists, onAddToPlaylist, currentPlaylistId, onMoveToPlaylist, isSelectionMode = false, isSelected = false, onToggleSelection }: SongCardProps) { const [showPlaylistMenu, setShowPlaylistMenu] = useState(false) const [showMoveMenu, setShowMoveMenu] = useState(false) const handleDelete = (e: React.MouseEvent) => { e.stopPropagation() onDelete(song.id) } const handleAddToPlaylist = (e: React.MouseEvent, playlistId: string) => { e.stopPropagation() if (onAddToPlaylist) { onAddToPlaylist(song.id, playlistId) } setShowPlaylistMenu(false) } const handleMoveToPlaylist = (e: React.MouseEvent, toPlaylistId: string) => { e.stopPropagation() if (onMoveToPlaylist && currentPlaylistId) { onMoveToPlaylist(song.id, currentPlaylistId, toPlaylistId) } setShowMoveMenu(false) } const toggleMoveMenu = (e: React.MouseEvent) => { e.stopPropagation() setShowMoveMenu(!showMoveMenu) } const togglePlaylistMenu = (e: React.MouseEvent) => { e.stopPropagation() setShowPlaylistMenu(!showPlaylistMenu) } return (
onToggleSelection?.(song.id) : () => onPlay(song)}> {/* Selection checkbox */} {isSelectionMode && (
)}
{!isSelectionMode && playlists && playlists.length > 0 && onAddToPlaylist && (
{showPlaylistMenu && (
{playlists.map((playlist) => ( ))}
)}
)} {!isSelectionMode && currentPlaylistId && playlists && playlists.length > 1 && onMoveToPlaylist && (
{showMoveMenu && (
{playlists .filter(playlist => playlist.id !== currentPlaylistId) .map((playlist) => ( ))}
)}
)} {!isSelectionMode && ( )}
{song.title}

{song.title}

{song.playlists && song.playlists.length > 0 && (
{song.playlists.slice(0, 2).map((playlist) => ( {playlist.name} ))} {song.playlists.length > 2 && ( +{song.playlists.length - 2} )}
)}

{song.channelName}

{formatDuration(song.duration)}
) }