import { useMusic } from '@/app/context/MusicContext';
import {
ActionIcon,
Avatar,
Box,
Button,
Flex,
Group,
Paper,
Slider,
Text,
Transition
} from '@mantine/core';
import {
IconArrowsShuffle,
IconMusic,
IconPlayerPauseFilled,
IconPlayerPlayFilled,
IconPlayerSkipBackFilled,
IconPlayerSkipForwardFilled,
IconRepeat,
IconRepeatOff,
IconVolume,
IconVolumeOff,
IconX,
} from '@tabler/icons-react';
import { useState } from 'react';
export default function FixedPlayerBar() {
const {
isPlaying,
currentSong,
currentTime,
duration,
volume,
isMuted,
isRepeat,
isShuffle,
togglePlayPause,
playNext,
playPrev,
seek,
setVolume,
toggleMute,
toggleRepeat,
toggleShuffle,
} = useMusic();
const [showVolume, setShowVolume] = useState(false);
const [isMinimized, setIsMinimized] = useState(false);
// Format time
const formatTime = (seconds: number) => {
const mins = Math.floor(seconds / 60);
const secs = Math.floor(seconds % 60);
return `${mins}:${secs.toString().padStart(2, '0')}`;
};
// Handle seek
const handleSeek = (value: number) => {
seek(value);
};
// Handle volume change
const handleVolumeChange = (value: number) => {
setVolume(value);
};
// Handle shuffle toggle
const handleToggleShuffle = () => {
toggleShuffle();
};
// Handle minimize player (show floating icon)
const handleMinimizePlayer = () => {
setIsMinimized(true);
};
// Handle restore player from floating icon
const handleRestorePlayer = () => {
setIsMinimized(false);
};
// If minimized, show floating icon instead of player bar
if (isMinimized) {
return (
<>
{/* Floating Music Icon - Shows when player is minimized */}
{/* Spacer to prevent content from being hidden behind player */}
>
);
}
if (!currentSong) {
return null;
}
return (
<>
{/* Mini Player Bar - Always visible when song is playing */}
{/* Song Info - Left */}
{currentSong.judul}
{currentSong.artis}
{/* Controls + Progress - Center */}
{/* Control Buttons */}
{isPlaying ? (
) : (
)}
{isRepeat ? : }
{/* Progress Bar - Desktop */}
formatTime(value)}
/>
{/* Right Controls - Volume + Close */}
setShowVolume(true)}
onMouseLeave={() => setShowVolume(false)}
pos="relative"
>
{isMuted ? (
) : (
)}
{(style) => (
)}
{/* Progress Bar - Mobile */}
formatTime(value)}
/>
{/* Spacer to prevent content from being hidden behind player */}
>
);
}