'use client';
import React, { useRef, useEffect, useState } from 'react';
import Messages from '@/lib/rag/client/components/Messages';
import ChatForm from '@/lib/rag/client/components/ChatForm';
import { useChatThread } from '@/lib/rag/client/hooks/useChatThread';
import { useChartData } from '@/lib/rag/client/hooks/useCharts';
import { DEMO_USER_ID } from '@/lib/rag/constants';
export default function SimpleChatPage() {
const messagesEndRef = useRef(null);
const [chartDataMap, setChartDataMap] = useState<Record<string, React.ReactNode>>({});
const {
messages,
setMessages,
isLoading,
handleSubmit,
ragThreadId,
} = useChatThread({
createThread: async () => {
const response = await fetch('/api/digital-accountant/thread', { method: 'POST' });
return await response.json();
},
loadMessages: async (threadId) => {
const response = await fetch(`/api/digital-accountant/thread/${threadId}`);
return await response.json();
},
fetchLastAssistantMessage: async (threadId) => {
const response = await fetch(`/api/digital-accountant/thread/${threadId}/lastAssistantMessage`);
return await response.json();
},
sendMessage: async (input, messages, threadId) => {
return await fetch('/api/digital-accountant', {
method: 'POST',
body: JSON.stringify({ messageRequest: input, conversationHistory: messages, ragThreadId: threadId }),
});
},
});
useChartData(messages, chartDataMap, setChartDataMap);
useEffect(() => {
messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
}, [messages]);
return (
<div className="flex flex-col min-h-full h-full">
<h2 className="text-xl font-bold">Chat</h2>
<Messages messages={messages} chartDataMap={chartDataMap} />
<ChatForm onSubmit={handleSubmit} isLoading={isLoading} />
<div ref={messagesEndRef} />
</div>
);
}