import React, { useState, useRef, useEffect, useCallback } from "react";
import useVoiceChat from "../hooks/useVoiceChat";
import ChatWindow from "../components/ChatWindow";
import Controls from "../components/Controls";
const VoiceChatPage = ({ Icon }) => {
const chatContainerRef = useRef(null);
const {
chatHistory,
status,
isRecording,
isBusy,
isAutoMode,
isAutoListening,
showErrorModal,
errorMessage,
setIsAutoMode,
handleMicClick,
setShowErrorModal,
} = useVoiceChat({ chatContainerRef });
useEffect(() => {
if (chatContainerRef.current) {
chatContainerRef.current.scrollTop = chatContainerRef.current.scrollHeight;
}
}, [chatHistory]);
const toggleAutoMode = () => {
setIsAutoMode(!isAutoMode);
};
return (
<div className="flex flex-col flex-grow h-full min-h-screen bg-gray-100 dark:bg-gray-900 text-gray-900 dark:text-gray-100">
<div className="flex-grow p-4 overflow-y-auto" ref={chatContainerRef}>
<ChatWindow chatHistory={chatHistory} />
</div>
<Controls
status={status}
isBusy={isBusy}
isRecording={isRecording}
isAutoMode={isAutoMode}
isAutoListening={isAutoListening}
onMicClick={handleMicClick}
onToggleAutoMode={toggleAutoMode}
/>
{showErrorModal && (
<div className="fixed inset-0 bg-gray-900 bg-opacity-75 flex justify-center items-center z-50">
<div className="bg-white dark:bg-gray-800 p-6 rounded-lg shadow-xl text-center">
<h2 className="text-xl font-bold mb-4 text-red-500">Error</h2>
<p className="mb-4">{errorMessage}</p>
<button
onClick={() => setShowErrorModal(false)}
className="bg-red-600 hover:bg-red-700 text-white font-bold py-2 px-4 rounded"
>
Close
</button>
</div>
</div>
)}
</div>
);
};
export default VoiceChatPage;