'use client'; import { useState, useRef, useEffect } from 'react'; import { Box, TextField, IconButton, Paper, Typography, Avatar, CircularProgress, Chip, } from '@mui/material'; import { Send, SmartToy, Person, AutoAwesome } from '@mui/icons-material'; import { motion, AnimatePresence } from 'framer-motion'; import { useAuth } from '@/lib/auth/AuthContext'; import apiClient from '@/lib/api/client'; interface Message { id: string; role: 'user' | 'assistant'; content: string; timestamp: Date; } const suggestedQuestions = [ 'How much should my baby sleep at 3 months?', 'What are normal feeding patterns?', 'When should I introduce solid foods?', 'Tips for better sleep routine', ]; export const AIChatInterface: React.FC = () => { const [messages, setMessages] = useState([]); const [input, setInput] = useState(''); const [isLoading, setIsLoading] = useState(false); const messagesEndRef = useRef(null); const { user } = useAuth(); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }; useEffect(() => { scrollToBottom(); }, [messages]); const handleSend = async (message?: string) => { const messageText = message || input.trim(); if (!messageText || isLoading) return; const userMessage: Message = { id: Date.now().toString(), role: 'user', content: messageText, timestamp: new Date(), }; setMessages((prev) => [...prev, userMessage]); setInput(''); setIsLoading(true); try { const response = await apiClient.post('/api/v1/ai/chat', { message: messageText, conversationId: null, }); const assistantMessage: Message = { id: (Date.now() + 1).toString(), role: 'assistant', content: response.data.data.message, timestamp: new Date(), }; setMessages((prev) => [...prev, assistantMessage]); } catch (error) { console.error('AI chat error:', error); const errorMessage: Message = { id: (Date.now() + 1).toString(), role: 'assistant', content: 'Sorry, I encountered an error. Please try again.', timestamp: new Date(), }; setMessages((prev) => [...prev, errorMessage]); } finally { setIsLoading(false); } }; const handleSuggestedQuestion = (question: string) => { handleSend(question); }; return ( {/* Header */} AI Parenting Assistant Ask me anything about parenting and childcare {/* Messages Container */} {messages.length === 0 && ( Hi {user?.name}! How can I help you today? {suggestedQuestions.map((question, index) => ( handleSuggestedQuestion(question)} sx={{ borderRadius: 3, '&:hover': { bgcolor: 'primary.light', color: 'white', }, }} /> ))} )} {messages.map((message) => ( {message.role === 'assistant' && ( )} {message.content} {message.timestamp.toLocaleTimeString()} {message.role === 'user' && ( )} ))} {isLoading && ( Thinking... )}
{/* Input Area */} setInput(e.target.value)} onKeyPress={(e) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSend(); } }} disabled={isLoading} sx={{ '& .MuiOutlinedInput-root': { borderRadius: 3, }, }} /> handleSend()} disabled={!input.trim() || isLoading} sx={{ width: 48, height: 48, bgcolor: 'primary.main', color: 'white', '&:hover': { bgcolor: 'primary.dark', }, '&:disabled': { bgcolor: 'action.disabledBackground', }, }} > This AI assistant provides general information. Always consult healthcare professionals for medical advice. ); };