import React from 'react'; import { FaRobot } from 'react-icons/fa'; import { FiUser, FiCpu, FiAlertTriangle, FiTerminal, FiInfo } from 'react-icons/fi'; import ReactMarkdown from 'react-markdown'; export type MessageType = 'user' | 'agent' | 'log' | 'error' | 'info'; export interface ChatMessage { id: string; type: MessageType; content: string; agentId?: string; timestamp: Date; } interface ChatMessageProps { message: ChatMessage; } // Componente para exibir uma única mensagem do chat const ChatMessageComponent: React.FC = ({ message }) => { // Renderiza logs de forma diferente if (message.type === 'log') { // Extrai informações do log no formato [Agent:agentId] message const logMatch = message.content.match(/\[Agent:([^\]]+)\] (.*)/); if (logMatch) { const [_, agentId, logContent] = logMatch; return (
{agentId}: {logContent}
); } return (
{message.content}
); } // Renderiza erros de forma destacada if (message.type === 'error') { return (

Erro:

{message.content}

); } // Renderiza mensagens informativas if (message.type === 'info') { return (

Informação:

{message.content}

); } // Renderiza mensagem do usuário if (message.type === 'user') { return (
{message.content}
); } // Renderiza resposta do agente const agentColor = getAgentColor(message.agentId || 'default'); return (
); }; // Função auxiliar para definir cores diferentes para cada agente const getAgentColor = (agentId: string): string => { switch (agentId) { case 'orchestrator': return 'bg-purple-600'; case 'mike': return 'bg-blue-600'; case 'alex': return 'bg-green-600'; case 'david': return 'bg-amber-600'; default: return 'bg-indigo-600'; } }; // Componente para exibir o conteúdo da mensagem com formatação markdown const MessageContent: React.FC<{ content: string }> = ({ content }) => { // Verifica se o conteúdo é HTML if (content.includes('
HTML gerado
{content}
); } // Tenta renderizar o conteúdo como markdown try { return (
{content}
); } catch { // Se falhar, renderiza como texto normal return
{content}
; } }; export default ChatMessageComponent;