import React, { useState, useRef, useEffect } from 'react'; import { MessageCircle, X, Send, Sparkles } from 'lucide-react'; import { BookingState, ChatMessage } from './types'; // TODO: Implement Gemini service const sendMessageToGemini = async (message: string, bookingState: BookingState): Promise => { // Mock implementation - replace with actual Gemini API call return "I'm here to help you book your appointment. Please use the booking form above."; }; interface GeminiChatProps { currentBookingState: BookingState; } export const GeminiChat: React.FC = ({ currentBookingState }) => { const [isOpen, setIsOpen] = useState(false); const [messages, setMessages] = useState([ { role: 'model', text: 'Hi! I can help you choose a service or answer questions about booking.' } ]); const [inputText, setInputText] = useState(''); const [isLoading, setIsLoading] = useState(false); const messagesEndRef = useRef(null); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }; useEffect(() => { scrollToBottom(); }, [messages, isOpen]); const handleSend = async () => { if (!inputText.trim() || isLoading) return; const userMsg: ChatMessage = { role: 'user', text: inputText }; setMessages(prev => [...prev, userMsg]); setInputText(''); setIsLoading(true); try { const responseText = await sendMessageToGemini(inputText, messages, currentBookingState); setMessages(prev => [...prev, { role: 'model', text: responseText }]); } catch (error) { setMessages(prev => [...prev, { role: 'model', text: "Sorry, I'm having trouble connecting." }]); } finally { setIsLoading(false); } }; return (
{/* Chat Window */} {isOpen && (
Lumina Assistant
{messages.map((msg, idx) => (
{msg.text}
))} {isLoading && (
)}
{ e.preventDefault(); handleSend(); }} className="flex items-center gap-2" > setInputText(e.target.value)} placeholder="Ask about services..." className="flex-1 px-4 py-2 rounded-full border border-gray-300 focus:outline-none focus:border-indigo-500 focus:ring-1 focus:ring-indigo-500 text-sm" />
)} {/* Toggle Button */}
); };