import { useRef, useState, useCallback } from 'react'; import { usePlayerStore } from '@/features/player/store/playerStore'; import { Button } from '@/components/ui/button'; import { Tooltip } from '@/components/ui/tooltip'; import { useTranslation } from '@/hooks/useTranslation'; import { List } from 'lucide-react'; import { QueuePanel } from '../QueuePanel'; import { useAudioPlayerEffects } from './useAudioPlayerEffects'; import { AudioPlayerTrackInfo } from './AudioPlayerTrackInfo'; import { AudioPlayerControls } from './AudioPlayerControls'; import { AudioPlayerProgress } from './AudioPlayerProgress'; import { AudioPlayerVolume } from './AudioPlayerVolume'; import type { AudioPlayerProps as Props } from './types'; export function AudioPlayer(_props: Props = {}) { const audioRef = useRef(null); const { handlePlayPause } = useAudioPlayerEffects(audioRef); const { currentTrack, isPlaying, currentTime, duration, volume, muted, repeat, shuffle, setCurrentTime, setVolume, toggleMute, toggleShuffle, setRepeat, next, previous, } = usePlayerStore(); const { t } = useTranslation(); const [showQueue, setShowQueue] = useState(false); const handleSeek = useCallback( (value: number[]) => { const audio = audioRef.current; const seekTime = value[0] ?? 0; if (audio) { audio.currentTime = seekTime; setCurrentTime(seekTime); } }, [setCurrentTime], ); const handleVolumeChange = useCallback((value: number[]) => setVolume(value[0] ?? 0), [setVolume]); const handleRepeatCycle = useCallback(() => { const modes: Array<'off' | 'track' | 'playlist'> = ['off', 'track', 'playlist']; const currentIndex = modes.indexOf(repeat); setRepeat(modes[(currentIndex + 1) % modes.length] ?? 'off'); }, [repeat, setRepeat]); if (!currentTrack) { return null; } return ( <>