'use client'; import React, { useState, useRef } from 'react'; function CallPage() { const [callDuration, setCallDuration] = React.useState(0); const [isRecording, setIsRecording] = useState(false); const [audioUrl, setAudioUrl] = useState(null); const [audioBlob, setAudioBlob] = useState(null); const mediaRecorderRef = useRef(null); // Reference for the MediaRecorder instance const audioChunks = useRef([]); // Array to store audio data chunks React.useEffect(() => { const interval = setInterval(() => { setCallDuration((prev) => prev + 1); }, 1000); return () => clearInterval(interval); }, []); // Start recording const startRecording = async () => { try { console.log("Start recording function called"); // permissions const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); mediaRecorderRef.current = new MediaRecorder(stream); // Collect audio data in chunks mediaRecorderRef.current.ondataavailable = (event) => { console.log("ondataavailable triggered, chunk size:", event.data.size); audioChunks.current.push(event.data); }; // Handle stop event mediaRecorderRef.current.onstop = () => { const audioBlob = new Blob(audioChunks.current, { type: 'audio/mp4' }); console.log("Total chunks received:", audioChunks.current.length); const audioUrl = URL.createObjectURL(audioBlob); setAudioBlob(audioBlob); if (mediaRecorderRef.current) { console.log('media recorder type', mediaRecorderRef.current.mimeType); } else { console.error('MediaRecorder is null'); } console.log(audioBlob); setAudioUrl(audioUrl); audioChunks.current = []; }; mediaRecorderRef.current.start(1000); console.log("Recording started"); setIsRecording(true); } catch (err) { console.error("Error accessing microphone:", err); } }; // Stop recording const stopRecording = () => { if (mediaRecorderRef.current && mediaRecorderRef.current.state !== "inactive") { mediaRecorderRef.current.stop(); setIsRecording(false); } }; // Play the recorded audio const playAudio = () => { if (audioUrl) { const audio = new Audio(audioUrl); audio.play(); } else { console.error("Audio URL is null or undefined."); } }; const handleEmergency = async () => { // send texts const response = await fetch("/api/sendMessage", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ message: `John Smith needs help. His GPS location is: https://www.google.com/maps/search/?api=1&query=38.03163938795633,-78.51085551716174`, }), }); if (!response.ok) { console.error("Error sending message:", response.statusText); return; } else { alert("Emergency message sent successfully."); } } return (

Call with a Definitely Real Person

{callDuration}s
{isRecording ? ( ) : ( )} {audioUrl && ( <>

Recorded Audio

)}
); }; export default CallPage;