import React, { useState, useEffect } from 'react'; import './BotaoVideoPaciente.css'; import { FaVideo, FaExpand, FaCompress, FaPhoneSlash, FaPhone } from 'react-icons/fa'; import { JitsiMeeting } from '@jitsi/react-sdk'; import { db } from '../firebaseConfig'; import { ref, onValue, remove } from "firebase/database"; // ID DO PACIENTE const MEU_ID_PACIENTE = '1'; // Deve ser '1' para bater com o do médico const BotaoVideoPaciente = () => { const [isOpen, setIsOpen] = useState(false); const [isFullScreen, setIsFullScreen] = useState(false); const [callActive, setCallActive] = useState(false); const [roomName, setRoomName] = useState(''); const [incomingCallData, setIncomingCallData] = useState(null); const [callerName, setCallerName] = useState(''); // "Ouvinte" do Firebase useEffect(() => { const callRef = ref(db, `calls/paciente-${MEU_ID_PACIENTE}`); const unsubscribe = onValue(callRef, (snapshot) => { const data = snapshot.val(); if (data && data.incomingCall) { setIncomingCallData(data.incomingCall); setCallerName(data.incomingCall.fromName); setIsOpen(true); } else { setIncomingCallData(null); setCallActive(false); } }); return () => unsubscribe(); }, []); // UseEffect da tecla "Esc" useEffect(() => { const handleEscKey = (event) => { if (event.key === 'Escape' && isFullScreen) { setIsFullScreen(false); } }; document.addEventListener('keydown', handleEscKey); return () => document.removeEventListener('keydown', handleEscKey); }, [isFullScreen]); // Função para ATENDER const handleAcceptCall = () => { if (!incomingCallData) return; setRoomName(incomingCallData.roomName); setCallActive(true); setIncomingCallData(null); }; // Função para RECUSAR / DESLIGAR const handleHangUp = () => { const callRef = ref(db, `calls/paciente-${MEU_ID_PACIENTE}`); remove(callRef); setCallActive(false); setRoomName(''); setCallerName(''); setIncomingCallData(null); }; // Função para fechar a janela const toggleVideoChat = () => { setIsOpen(!isOpen); if (isOpen) { handleHangUp(); setIsFullScreen(false); } }; const handleFullScreen = () => { setIsFullScreen(!isFullScreen); }; // Renderiza o conteúdo (Ocioso, Recebendo, Em Chamada) const renderContent = () => { // 1ª Prioridade: Em chamada ativa if (callActive) { return (
{ iframe.style.height = '100%'; }} onApiReady={(api) => { api.on('videoConferenceLeft', handleHangUp); }} />
); } // 2ª Prioridade: Recebendo uma chamada if (incomingCallData) { return (

Chamada recebida de:

{callerName || 'Médico'}

); } // 3ª Prioridade: Nenhuma chamada, tela de espera return (

Aguardando chamadas do seu médico...

); }; return (
{isOpen && (

{callActive ? `Em chamada...` : (incomingCallData ? 'Chamada Recebida' : 'Videochamada')}

{renderContent()}
)}
); }; export default BotaoVideoPaciente;