import React, { useState, useRef, useEffect } from 'react'; import { ChatIcon, CloseIcon, SendIcon } from './Icons'; import { ChatMessage } from '../types'; interface AIChatProps { onSendMessage: (text: string) => Promise; isOpen: boolean; setIsOpen: (open: boolean) => void; } const ModelMessage: React.FC<{ text: string }> = ({ text }) => { const elements: React.ReactNode[] = []; let listItems: React.ReactNode[] = []; const flushList = () => { if (listItems.length > 0) { elements.push( ); listItems = []; } }; const parseBold = (content: string, keyPrefix: string) => { const parts = content.split(/(\*\*.*?\*\*)/g); return parts.map((part, i) => { if (part.startsWith('**') && part.endsWith('**')) { return {part.slice(2, -2)}; } return part; }); } text.split('\n').forEach((line, index) => { const trimmedLine = line.trim(); if (trimmedLine.startsWith('* ') || trimmedLine.startsWith('- ')) { const content = trimmedLine.substring(2); listItems.push(
  • {parseBold(content, `li-${index}`)}
  • ); } else { flushList(); if (line.trim() !== '') { elements.push(

    {parseBold(line, `p-${index}`)}

    ); } } }); flushList(); // Flush any remaining list items at the end return <>{elements.length > 0 ? elements :

    {text}

    }; }; const AIChat: React.FC = ({ onSendMessage, isOpen, setIsOpen }) => { const [messages, setMessages] = useState([ { role: 'model', text: '¡Hola! Soy tu Estratega y KAM (Key Account Manager) experto. He analizado tus datos actuales de ventas y publicidad. ¿En qué puedo ayudarte a optimizar tu negocio hoy?', timestamp: new Date() } ]); const [input, setInput] = useState(''); const [isTyping, setIsTyping] = useState(false); const messagesEndRef = useRef(null); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }; useEffect(scrollToBottom, [messages, isOpen]); const handleSend = async () => { if (!input.trim()) return; const userMsg: ChatMessage = { role: 'user', text: input, timestamp: new Date() }; setMessages(prev => [...prev, userMsg]); setInput(''); setIsTyping(true); const responseText = await onSendMessage(userMsg.text); setIsTyping(false); setMessages(prev => [...prev, { role: 'model', text: responseText, timestamp: new Date() }]); }; const handleKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter' && !e.shiftKey) { e.preventDefault(); handleSend(); } }; return ( <> {/* Trigger Button - above bottom nav on mobile */} {/* Chat Window - fullscreen on mobile, floating on desktop */}
    {/* Header */}

    KAM Strategy Expert

    {/* Messages */}
    {messages.map((msg, idx) => (
    {msg.role === 'model' ? : msg.text}
    ))} {isTyping && (
    )}
    {/* Input */}
    setInput(e.target.value)} onKeyDown={handleKeyDown} placeholder="Pregunta sobre tendencias, recomendaciones de publicidad..." className="w-full bg-slate-950 border border-slate-700 text-slate-200 rounded-full py-3 pl-4 pr-12 focus:outline-none focus:border-primary transition-colors placeholder-slate-500 text-sm" />
    ); }; export default AIChat;