'use client' import { Container, Grid, Card, CardContent, Typography, Box, TextField, Button, Paper, List, ListItem, Avatar, Chip, IconButton, Divider, useTheme, } from '@mui/material' import { Chat, Send, Person, SmartToy, ContentCopy, ThumbUp, ThumbDown, Refresh, } from '@mui/icons-material' import { Navigation } from '@/components/layout/navigation' import { useState, useRef, useEffect } from 'react' interface ChatMessage { id: string role: 'user' | 'assistant' content: string timestamp: Date } export default function ChatPage() { const theme = useTheme() const [messages, setMessages] = useState([ { id: '1', role: 'assistant', content: 'Bună ziua! Sunt asistentul tău AI pentru întrebări biblice. Cum te pot ajuta astăzi să înțelegi mai bine Scriptura?', timestamp: new Date(), } ]) const [inputMessage, setInputMessage] = useState('') const [isLoading, setIsLoading] = useState(false) const messagesEndRef = useRef(null) const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }) } useEffect(() => { scrollToBottom() }, [messages]) const handleSendMessage = async () => { if (!inputMessage.trim() || isLoading) return const userMessage: ChatMessage = { id: Date.now().toString(), role: 'user', content: inputMessage, timestamp: new Date(), } setMessages(prev => [...prev, userMessage]) setInputMessage('') setIsLoading(true) try { const response = await fetch('/api/chat', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ message: inputMessage, history: messages.slice(-5), // Send last 5 messages for context }), }) if (!response.ok) { throw new Error('Failed to get response') } const data = await response.json() const assistantMessage: ChatMessage = { id: (Date.now() + 1).toString(), role: 'assistant', content: data.response || 'Îmi pare rău, nu am putut procesa întrebarea ta. Te rog încearcă din nou.', timestamp: new Date(), } setMessages(prev => [...prev, assistantMessage]) } catch (error) { console.error('Error sending message:', error) const errorMessage: ChatMessage = { id: (Date.now() + 1).toString(), role: 'assistant', content: 'Îmi pare rău, a apărut o eroare. Te rog verifică conexiunea și încearcă din nou.', timestamp: new Date(), } setMessages(prev => [...prev, errorMessage]) } finally { setIsLoading(false) } } const handleKeyPress = (event: React.KeyboardEvent) => { if (event.key === 'Enter' && !event.shiftKey) { event.preventDefault() handleSendMessage() } } const copyToClipboard = (text: string) => { navigator.clipboard.writeText(text) } const suggestedQuestions = [ 'Ce spune Biblia despre iubire?', 'Explică-mi parabola semănătorului', 'Care sunt fructele Duhului?', 'Ce înseamnă să fii născut din nou?', 'Cum pot să mă rog mai bine?', ] return ( {/* Header */} Chat cu AI Biblic Pune întrebări despre Scriptură și primește răspunsuri fundamentate biblic {/* Suggested Questions Sidebar */} Întrebări sugerate Începe cu una dintre aceste întrebări populare: {suggestedQuestions.map((question, index) => ( setInputMessage(question)} sx={{ mb: 1, mr: 1, cursor: 'pointer', '&:hover': { bgcolor: 'primary.light', color: 'white', }, }} variant="outlined" size="small" /> ))} Sfaturi pentru chat • Fii specific în întrebări
• Menționează pasaje biblice dacă le cunoști
• Poți întreba despre context istoric
• Solicită explicații teologice
{/* Main Chat Area */} {/* Chat Messages */} {messages.map((message) => ( {message.role === 'user' ? : } {message.content} {message.role === 'assistant' && ( copyToClipboard(message.content)} title="Copiază răspunsul" > )} {message.timestamp.toLocaleTimeString('ro-RO', { hour: '2-digit', minute: '2-digit', })} ))} {isLoading && ( Scriu răspunsul... )}
{/* Message Input */} setInputMessage(e.target.value)} onKeyPress={handleKeyPress} disabled={isLoading} variant="outlined" /> Apasă Enter pentru a trimite, Shift+Enter pentru linie nouă ) }