'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 (
{song.channelName}
{formatDuration(song.duration)}