import React, { useState, useRef, useEffect } from "react"; import { MessageCircle, X, Send } from "lucide-react"; interface Message { id: string; text: string; sender: "user" | "bot"; timestamp: Date; } interface ChatbotProps { className?: string; } const Chatbot: React.FC = ({ className = "" }) => { const [isOpen, setIsOpen] = useState(false); const [messages, setMessages] = useState([ { id: "welcome", text: "Olá! Sou o assistente virtual do MediConnect. Como posso ajudá-lo hoje?", sender: "bot", timestamp: new Date(), }, ]); const [inputValue, setInputValue] = useState(""); const [isTyping, setIsTyping] = useState(false); const messagesEndRef = useRef(null); const scrollToBottom = () => { messagesEndRef.current?.scrollIntoView({ behavior: "smooth" }); }; useEffect(() => { scrollToBottom(); }, [messages]); const quickReplies = [ "Como agendar uma consulta?", "Como cancelar agendamento?", "Esqueci minha senha", "Suporte técnico", ]; const getBotResponse = (userMessage: string): string => { const message = userMessage.toLowerCase(); // Respostas baseadas em palavras-chave if (message.includes("agendar") || message.includes("marcar")) { return "Para agendar uma consulta:\n\n1. Acesse 'Agendar Consulta' no menu\n2. Selecione o médico desejado\n3. Escolha data e horário disponível\n4. Confirme o agendamento\n\nVocê receberá uma confirmação por e-mail!"; } if (message.includes("cancelar") || message.includes("remarcar")) { return "Para cancelar ou remarcar uma consulta:\n\n1. Vá em 'Minhas Consultas'\n2. Localize a consulta\n3. Clique em 'Cancelar' ou 'Remarcar'\n\nRecomendamos fazer isso com 24h de antecedência para evitar taxas."; } if (message.includes("senha") || message.includes("login")) { return "Para recuperar sua senha:\n\n1. Clique em 'Esqueceu a senha?' na tela de login\n2. Insira seu e-mail cadastrado\n3. Você receberá um link para redefinir a senha\n\nSe não receber o e-mail, verifique sua caixa de spam."; } if (message.includes("pagamento") || message.includes("pagar")) { return "Aceitamos as seguintes formas de pagamento:\n\n• Cartão de crédito (parcelamento em até 3x)\n• Cartão de débito\n• PIX\n• Boleto bancário\n\nTodos os pagamentos são processados com segurança."; } if (message.includes("teleconsulta") || message.includes("online")) { return "Para realizar uma teleconsulta:\n\n1. Acesse 'Minhas Consultas' no horário agendado\n2. Clique em 'Iniciar Consulta Online'\n3. Permita acesso à câmera e microfone\n\nCertifique-se de ter uma boa conexão de internet!"; } if (message.includes("histórico") || message.includes("prontuário")) { return "Seu histórico médico pode ser acessado em:\n\n• 'Meu Perfil' > 'Histórico Médico'\n• 'Minhas Consultas' (consultas anteriores)\n\nVocê pode fazer download de relatórios e receitas quando necessário."; } if ( message.includes("suporte") || message.includes("ajuda") || message.includes("atendimento") ) { return "Nossa equipe de suporte está disponível:\n\n📞 Telefone: 0800-123-4567\n📧 E-mail: suporte@mediconnect.com.br\n⏰ Horário: Segunda a Sexta, 8h às 18h\n\nVocê também pode acessar nossa Central de Ajuda completa no menu."; } if (message.includes("obrigad") || message.includes("valeu")) { return "Por nada! Estou sempre aqui para ajudar. Se tiver mais dúvidas, é só chamar! 😊"; } if ( message.includes("oi") || message.includes("olá") || message.includes("hello") ) { return "Olá! Como posso ajudá-lo hoje? Você pode perguntar sobre agendamentos, consultas, pagamentos ou qualquer dúvida sobre o MediConnect."; } // Resposta padrão return "Desculpe, não entendi sua pergunta. Você pode:\n\n• Perguntar sobre agendamentos\n• Consultar formas de pagamento\n• Saber sobre teleconsultas\n• Acessar histórico médico\n• Falar com suporte\n\nOu visite nossa Central de Ajuda para mais informações!"; }; const handleSend = () => { if (!inputValue.trim()) return; // Adiciona mensagem do usuário const userMessage: Message = { id: Date.now().toString(), text: inputValue, sender: "user", timestamp: new Date(), }; setMessages((prev) => [...prev, userMessage]); setInputValue(""); // Simula digitação do bot setIsTyping(true); setTimeout(() => { const botResponse: Message = { id: (Date.now() + 1).toString(), text: getBotResponse(inputValue), sender: "bot", timestamp: new Date(), }; setMessages((prev) => [...prev, botResponse]); setIsTyping(false); }, 1000); }; const handleQuickReply = (reply: string) => { setInputValue(reply); }; const handleKeyPress = (e: React.KeyboardEvent) => { if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); handleSend(); } }; return (
{/* Floating Button */} {!isOpen && ( )} {/* Chat Window */} {isOpen && (
{/* Header */}

Assistente MediConnect

Online • Responde em segundos

{/* Messages */}
{messages.map((message) => (

{message.text}

{message.timestamp.toLocaleTimeString("pt-BR", { hour: "2-digit", minute: "2-digit", })}

))} {isTyping && (
)}
{/* Quick Replies */} {messages.length <= 1 && (

Perguntas frequentes:

{quickReplies.map((reply, index) => ( ))}
)} {/* Input */}
setInputValue(e.target.value)} onKeyPress={handleKeyPress} placeholder="Digite sua mensagem..." className="flex-1 border border-gray-300 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
)}
); }; export default Chatbot;