import React, { useState, useEffect } from 'react' import { useLocalParticipant, useTracks } from '@livekit/components-react' import { Track } from 'livekit-client' import { MdMic, MdMicOff, MdVideocam, MdVideocamOff, MdScreenShare, MdStopScreenShare, MdSettings, MdPeople, MdViewComfy, MdFiberManualRecord, MdStop, } from 'react-icons/md' interface Props { onOpenPresentation?: () => void onShareScreen?: () => void sharedPresentation?: { type: 'screen' | 'file', url: string } | null onClearPresentation?: () => void layout?: 'grid' | 'focus' mode?: 'video' | 'audio' onChangeLayout?: (layout: 'grid'|'focus') => void onChangeMode?: (mode: 'video'|'audio') => void } const StudioControls: React.FC = ({ onOpenPresentation, onShareScreen, sharedPresentation, onClearPresentation, layout, mode, onChangeLayout, onChangeMode }) => { const { localParticipant } = useLocalParticipant() const [micEnabled, setMicEnabled] = useState(true) const [cameraEnabled, setCameraEnabled] = useState(true) const [isScreenSharing, setIsScreenSharing] = useState(false) const [isRecording, setIsRecording] = useState(false) // Sincronizar estado con LiveKit useEffect(() => { if (localParticipant) { setMicEnabled(localParticipant.isMicrophoneEnabled) setCameraEnabled(localParticipant.isCameraEnabled) setIsScreenSharing(localParticipant.isScreenShareEnabled) } }, [localParticipant]) const toggleMicrophone = async () => { if (localParticipant) { const enabled = !micEnabled await localParticipant.setMicrophoneEnabled(enabled) setMicEnabled(enabled) } } const toggleCamera = async () => { if (localParticipant) { const enabled = !cameraEnabled await localParticipant.setCameraEnabled(enabled) setCameraEnabled(enabled) } } const toggleScreenShare = async () => { if (localParticipant) { const enabled = !isScreenSharing await localParticipant.setScreenShareEnabled(enabled) setIsScreenSharing(enabled) } } const toggleRecording = () => { // TODO: Implementar grabación con LiveKit setIsRecording(!isRecording) console.log('Recording:', !isRecording) } return (
{/* Izquierda - Info de sala */}
Transmisión en vivo {isRecording && (
Grabando
)}
{/* Centro - Controles principales */}
{/* Micrófono */} {/* Cámara */} {/* Compartir pantalla */} {/* Botón rápido para abrir el panel de presentación (subir archivos) */}
{/* Layouts */} {/* Layout selector */}
{/* Configuración */}
{/* Grabar */}
{/* Derecha - Presentación / Salir */}
{sharedPresentation ? (
Presentación activa
) : null}
) } export default StudioControls