import React, { useState } from 'react'; import { useAudio } from '../../context/AudioContext'; import { MiniPlayer } from '../player/MiniPlayer'; import { FullPlayer } from '../player/FullPlayer'; import { X, ListMusic, Play, GripVertical, Trash2, ArrowUpToLine, ListPlus, Clock, Heart, } from 'lucide-react'; import { useToast } from '../../context/ToastContext'; import { Button } from '../ui/button'; export const AudioPlayer: React.FC = () => { const { currentTrack, queue, history, reorderQueue, playTrack, playNext, removeFromQueue, addToQueue, clearQueue, } = useAudio(); const { addToast } = useToast(); const [isImmersive, setIsImmersive] = useState(false); const [showQueue, setShowQueue] = useState(false); const [queueTab, setQueueTab] = useState<'up-next' | 'history'>('up-next'); const [draggedItemIndex, setDraggedItemIndex] = useState(null); if (!currentTrack) return null; // Queue Drag Handlers const onDragStart = (e: React.DragEvent, index: number) => { setDraggedItemIndex(index); e.dataTransfer.effectAllowed = 'move'; const ghost = document.createElement('div'); ghost.style.opacity = '0'; document.body.appendChild(ghost); e.dataTransfer.setDragImage(ghost, 0, 0); setTimeout(() => document.body.removeChild(ghost), 0); }; const onDragOver = (e: React.DragEvent, index: number) => { e.preventDefault(); if (draggedItemIndex === null || draggedItemIndex === index) return; reorderQueue(draggedItemIndex, index); setDraggedItemIndex(index); }; const onDragEnd = () => setDraggedItemIndex(null); return ( <> {/* IMMERSIVE PLAYER OVERLAY */} {isImmersive && setIsImmersive(false)} />} {/* QUEUE DRAWER */} {showQueue && !isImmersive && (

PLAY QUEUE

setShowQueue(false)} />
{queueTab === 'up-next' && ( <>
Now Playing
{`Cover
{currentTrack.title}
{currentTrack.artist}
{queue.length === 0 && (

Queue is empty

)} {queue.map((track, i) => (
onDragStart(e, i)} onDragOver={(e) => onDragOver(e, i)} onDragEnd={onDragEnd} className={`flex items-center gap-3 p-2 rounded-lg group transition-colors border border-transparent ${draggedItemIndex === i ? 'bg-kodo-cyan/10 border-kodo-cyan/50' : 'hover:bg-white/5 hover:border-white/5'}`} >
{`Cover
playTrack(track)} >
{track.title}
{track.artist}
))}
)} {queueTab === 'history' && (
{history.length === 0 && (

No history yet

)} {[...history].reverse().map((track, i) => (
{`Cover
{track.title}
{track.artist}
))}
)}
{queueTab === 'up-next' && queue.length > 0 && (
)}
)} {/* MINI PLAYER BAR */} setIsImmersive(true)} onToggleQueue={() => setShowQueue(!showQueue)} isQueueOpen={showQueue} /> ); };