import { useState, useRef, useCallback } from 'react' export function useMediaRecorder(onRecordingComplete) { const [isRecording, setIsRecording] = useState(false) const [error, setError] = useState(null) const mediaRecorderRef = useRef(null) const streamRef = useRef(null) const chunksRef = useRef([]) const startRecording = useCallback(async () => { try { const stream = await navigator.mediaDevices.getUserMedia({ audio: true }) streamRef.current = stream const mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm;codecs=opus' }) chunksRef.current = [] mediaRecorder.ondataavailable = (e) => { if (e.data.size > 0) { chunksRef.current.push(e.data) } } mediaRecorder.onstop = async () => { const audioBlob = new Blob(chunksRef.current, { type: 'audio/webm' }) const reader = new FileReader() reader.onloadend = () => { const base64 = reader.result.split(',')[1] onRecordingComplete?.(base64) } reader.readAsDataURL(audioBlob) streamRef.current?.getTracks().forEach(t => t.stop()) } mediaRecorder.start() mediaRecorderRef.current = mediaRecorder setIsRecording(true) setError(null) } catch (e) { console.error('[Mic] Error:', e) setError('Permita acesso ao microfone') } }, [onRecordingComplete]) const stopRecording = useCallback(() => { if (mediaRecorderRef.current && isRecording) { mediaRecorderRef.current.stop() setIsRecording(false) } }, [isRecording]) return { isRecording, error, startRecording, stopRecording } }