import React from "react"; import { Play, Pause, Volume2, Music } from "lucide-react"; import { cn } from "@/utils/cn"; import Image from "next/image"; import { api } from "@/lib/api"; import type { Track, Artist } from "../types"; interface PopularTracksProps { tracks: Track[]; artist: Artist; currentTrackId: string | undefined; colors: any; onPlayTrack: (track: Track) => void; previewTrack: string | null; previewPlaying: boolean; onPreview: (track: Track, e: React.MouseEvent) => void; } export const PopularTracks: React.FC = ({ tracks, artist, currentTrackId, colors, onPlayTrack, previewTrack, previewPlaying, onPreview, }) => { const formatDuration = (seconds: number) => { const mins = Math.floor(seconds / 60); const secs = seconds % 60; return `${mins}:${secs.toString().padStart(2, "0")}`; }; const formatNumber = (num: number) => { if (num >= 1000000) { return `${(num / 1000000).toFixed(1)}M`; } else if (num >= 1000) { return `${(num / 1000).toFixed(1)}K`; } return num.toString(); }; return (

Popular

{tracks.slice(0, 5).map((track, index) => { const isPlaying = currentTrackId === track.id; const isPreviewPlaying = previewTrack === track.id && previewPlaying; const isUnowned = !track.album?.id || !track.album?.title || track.album.title === "Unknown Album"; const coverUrl = track.album?.coverArt ? api.getCoverArtUrl(track.album.coverArt, 80) : null; return (
{ if (isUnowned) { onPreview(track, e); } else { onPlayTrack(track); } }} > {/* Track Number / Play Icon */}
{isPlaying ? ( ) : ( index + 1 )}
{/* Title + Album Art */}
{coverUrl ? ( {track.title} ) : (
)}
{track.displayTitle ?? track.title} {isUnowned && ( PREVIEW )}

{artist.name}

{/* Play Count (hidden on mobile) */}
{track.playCount !== undefined && track.playCount > 0 && ( {formatNumber(track.playCount)} )}
{/* Duration + Preview */}
{isUnowned && ( )} {track.duration && ( {formatDuration(track.duration)} )}
); })}
); };