import React from 'react'; import { IonCard, IonCardContent, IonChip, IonIcon } from '@ionic/react'; import { playOutline, pauseOutline, stopOutline, play, pause, stop } from 'ionicons/icons'; import ActionButton from './ActionButton'; import { useAppSelector } from '../../redux'; import { selectPlayerState, selectIsAdmin, selectQueue } from '../../redux'; import { playerService } from '../../firebase/services'; import { selectControllerName } from '../../redux'; import { useToast } from '../../hooks/useToast'; import { PlayerState } from '../../types'; interface PlayerControlsProps { className?: string; variant?: 'light' | 'dark'; } const PlayerControls: React.FC = ({ className = '', variant = 'light' }) => { const playerState = useAppSelector(selectPlayerState); const isAdmin = useAppSelector(selectIsAdmin); const controllerName = useAppSelector(selectControllerName); const queue = useAppSelector(selectQueue); const { showSuccess, showError } = useToast(); // Debug logging console.log('PlayerControls - playerState:', playerState); console.log('PlayerControls - isAdmin:', isAdmin); console.log('PlayerControls - queue length:', Object.keys(queue).length); const handlePlay = async () => { if (!controllerName) return; try { await playerService.updatePlayerStateValue(controllerName, PlayerState.playing); showSuccess('Playback started'); } catch (error) { console.error('Failed to start playback:', error); showError('Failed to start playback'); } }; const handlePause = async () => { if (!controllerName) return; try { await playerService.updatePlayerStateValue(controllerName, PlayerState.paused); showSuccess('Playback paused'); } catch (error) { console.error('Failed to pause playback:', error); showError('Failed to pause playback'); } }; const handleStop = async () => { if (!controllerName) return; try { await playerService.updatePlayerStateValue(controllerName, PlayerState.stopped); showSuccess('Playback stopped'); } catch (error) { console.error('Failed to stop playback:', error); showError('Failed to stop playback'); } }; // Only show controls for admin users if (!isAdmin) { return null; } const currentState = playerState?.state || PlayerState.stopped; const hasSongsInQueue = Object.keys(queue).length > 0; console.log('PlayerControls - currentState:', currentState); console.log('PlayerControls - hasSongsInQueue:', hasSongsInQueue); const getStateColor = () => { switch (currentState) { case PlayerState.playing: return 'success'; case PlayerState.paused: return 'warning'; default: return 'medium'; } }; const getStatusText = () => { switch (currentState) { case PlayerState.playing: return 'Currently Playing'; case PlayerState.paused: return 'Currently Paused'; default: return 'Currently Stopped'; } }; // Dark mode variant if (variant === 'dark') { return (
{/* Status Text */}

{getStatusText()}

{/* Control Buttons */}
{currentState === PlayerState.playing ? (
Pause
) : (
Play
)} {currentState !== PlayerState.stopped && (
Stop
)}
{!hasSongsInQueue && (
Add songs to queue to enable playback controls
)}
); } // Light mode variant (original) return (

Player Controls

{currentState}
{currentState === PlayerState.playing ? ( ) : ( )} {currentState !== PlayerState.stopped && ( )}
Admin controls - Only visible to admin users {!hasSongsInQueue && (
Add songs to queue to enable playback controls
)}
); }; export default PlayerControls;