import { BarChart3, ImageIcon, Table as TableIcon, FileText } from 'lucide-react'; import React from 'react'; export interface AssistantSuggestion { id: string; text: string; icon?: React.ReactNode; } export interface AssistantMessage { id: string; type: 'user' | 'assistant' | 'system'; content: string; timestamp: Date; isFavorite?: boolean; chartData?: any[]; chartConfig?: any; attachmentType?: 'file' | 'audio' | 'image' | 'video' | 'document' | 'podcast' | 'search'; attachmentName?: string; documentContent?: string; documentTitle?: string; tableData?: { caption?: string; headers: string[]; rows: (string | React.ReactNode)[][]; }; audioUrl?: string; evaluation?: 'like' | 'dislike'; evaluationReason?: string; } export interface MockResponse { trigger: string | RegExp; response: string | Partial; delay?: number; } /** * Default suggestion chips for the chat interface. */ export const sugestoesPadrao: AssistantSuggestion[] = [ { id: '1', text: 'O que posso pedir para você fazer?' }, { id: '2', text: 'O que você faz?' }, { id: '3', text: 'Com quais projetos devo me preocupar agora?' }, { id: '4', text: 'Qual meu próximo projeto?' }, { id: '5', text: 'Qual projetos está tendo o melhor desempenho?' }, ]; /** * Rich suggestion chips with icons for the chat interface. */ export const sugestoesRicas: AssistantSuggestion[] = [ { id: 'rich-1', text: 'Ver exemplo de Gráfico', icon: React.createElement(BarChart3, { className: 'w-4 h-4 mr-2' }), }, { id: 'rich-2', text: 'Ver exemplo de Imagem', icon: React.createElement(ImageIcon, { className: 'w-4 h-4 mr-2' }), }, { id: 'rich-3', text: 'Ver exemplo de Tabela', icon: React.createElement(TableIcon, { className: 'w-4 h-4 mr-2' }), }, { id: 'rich-4', text: 'Ver exemplo de Documento', icon: React.createElement(FileText, { className: 'w-4 h-4 mr-2' }), }, ]; /** * Mock AI Response Generator. * * @description * Simulates an AI response logic based on user triggers. It supports custom * regex-based or string-based response overrides. * * @param mensagemUsuario The user message to process. * @param customResponses Optional list of custom mock responses. * @returns A string or a Message object with the response. */ export const gerarResposta = ( mensagemUsuario: string, customResponses?: MockResponse[] ): string | Partial => { const mensagemLower = mensagemUsuario.toLowerCase(); // 1. Check custom responses first if (customResponses && customResponses.length > 0) { for (const mock of customResponses) { const trigger = mock.trigger; let match = false; if (trigger instanceof RegExp) { match = trigger.test(mensagemUsuario); } else { match = mensagemLower.includes(trigger.toLowerCase()); } if (match) { return mock.response; } } } const mensagemOriginal = mensagemUsuario; if ( mensagemLower.includes('o que') && (mensagemLower.includes('fazer') || mensagemLower.includes('pedir')) ) { return 'Posso ajudar você com diversas tarefas! Posso:\n\n• Analisar dados e métricas dos seus projetos\n• Responder perguntas sobre performance e resultados\n• Sugerir otimizações e melhorias\n• Gerar relatórios e documentação\n• Ajudar no planejamento de sprints\n• E muito mais!\n\nQual tarefa você gostaria de realizar primeiro?'; } if (mensagemLower.includes('o que você faz') || mensagemLower.includes('quem é você')) { return 'Olá! Sou o Assistente Xertica, uma IA desenvolvida para ajudar você a gerenciar projetos, analisar dados e otimizar processos. Estou aqui 24/7 para responder suas perguntas e auxiliar nas suas tarefas diárias.\n\nPosso processar documentos, analisar áudios e imagens, além de fornecer insights baseados nos dados da plataforma.'; } if ( mensagemLower.includes('projeto') && (mensagemLower.includes('preocupar') || mensagemLower.includes('atenção')) ) { return 'Com base na análise dos seus projetos ativos, recomendo focar nos seguintes:\n\n1. **Projeto Alpha** - 15% acima do prazo, requer atenção imediata\n2. **Sistema Beta** - Performance crítica, necessita otimização\n3. **Mobile Gamma** - Aguardando aprovações há 5 dias\n\nGostaria de mais detalhes sobre algum deles?'; } if (mensagemLower.includes('próximo projeto') || mensagemLower.includes('próxima tarefa')) { return 'Seu próximo projeto prioritário é o **Sistema de Analytics V2**.\n\n📅 Início previsto: Próxima segunda-feira\n👥 Time: 5 desenvolvedores\n⏱️ Duração estimada: 3 sprints\n\nJá preparei um roadmap inicial. Gostaria de revisar?'; } if ( mensagemLower.includes('desempenho') || mensagemLower.includes('performance') || mensagemLower.includes('melhor') ) { return 'Analisando os dados de performance dos últimos 30 dias:\n\n🏆 **Melhor Performance:**\n• Projeto Dashboard 2.0: +35% eficiência\n• Sistema CRM: -40% tempo de resposta\n• App Mobile: 4.8★ rating (+0.5)\n\n📊 Todos estão acima das metas estabelecidas. Parabéns!\n\nQuer ver métricas detalhadas?'; } if ( mensagemLower.includes('olá') || mensagemLower.includes('oi') || mensagemLower.includes('bom dia') || mensagemLower.includes('boa tarde') || mensagemLower.includes('boa noite') ) { return 'Olá! 👋 Como posso ajudar você hoje? Estou pronto para auxiliar com análises, relatórios ou responder suas dúvidas sobre os projetos.'; } if (mensagemLower.includes('obrigado') || mensagemLower.includes('obrigada')) { return 'Por nada! Estou aqui sempre que precisar. 😊 Se tiver mais alguma dúvida ou precisar de ajuda, é só chamar!'; } if (mensagemLower.includes('criar documento')) { const tema = mensagemOriginal.replace(/📄 \[Criar documento\]/gi, '').trim() || 'Novo Documento'; return { content: `📝 Documento criado com sucesso!\n\nGerei um documento completo sobre "${tema}". O documento está pronto para revisão e pode ser editado conforme necessário.`, attachmentType: 'document', attachmentName: `Documento - ${tema}.md`, documentTitle: tema, documentContent: `# ${tema}\n\n## Introdução\nEste é um documento gerado automaticamente sobre ${tema}.\n\n## Detalhes\n- Item 1\n- Item 2\n\n## Conclusão\nDocumento finalizado.`, }; } if (mensagemLower.includes('gráfico') || mensagemLower.includes('chart')) { return { content: 'Aqui está a análise de performance solicitada:', chartData: [ { month: 'Jan', desktop: 186, mobile: 80 }, { month: 'Fev', desktop: 305, mobile: 200 }, { month: 'Mar', desktop: 237, mobile: 120 }, { month: 'Abr', desktop: 73, mobile: 190 }, { month: 'Mai', desktop: 209, mobile: 130 }, { month: 'Jun', desktop: 214, mobile: 140 }, ], chartConfig: { desktop: { label: 'Desktop', color: 'hsl(var(--primary))' }, mobile: { label: 'Mobile', color: 'hsl(var(--destructive))' }, }, }; } if (mensagemLower.includes('tabela') || mensagemLower.includes('table')) { return { content: 'Aqui estão os dados estruturados conforme solicitado:', tableData: { caption: 'Lista de Projetos Ativos', headers: ['Projeto', 'Status', 'Prazo'], rows: [ ['Alpha', 'Em andamento', '15/05'], ['Beta', 'Concluido', '02/04'], ['Gamma', 'Atrasado', '10/01'], ], }, }; } if (mensagemLower.includes('exemplo de documento')) { return { content: 'Com certeza! Aqui está um exemplo de documento profissional que acabei de gerar:', attachmentType: 'document', attachmentName: 'Proposta_Comercial_Xertica.md', documentTitle: 'Proposta Comercial Xertica', documentContent: '# Proposta Comercial\n\n## 1. Visão Geral\nNossa solução oferece o melhor desempenho para sua empresa.\n\n## 2. Investimento\nO valor total é de R$ 50.000,00.', }; } if (mensagemLower.includes('arquivo') || mensagemLower.includes('documento')) { return 'Entendi que você deseja trabalhar com arquivos. Posso analisar diversos tipos de documentos:\n\n📄 Documentos de texto (PDF, DOCX)\n📊 Planilhas (XLSX, CSV)\n📈 Relatórios e apresentações\n\nBasta enviá-los usando o botão de anexo (📎) e terei prazer em analisá-los para você!'; } // Resposta genérica inteligente const respostasGenericas = [ 'Entendo sua questão. Com base nos dados disponíveis na plataforma Xertica, posso fornecer análises detalhadas sobre esse tema. Poderia me dar mais contexto para que eu possa ajudá-lo melhor?', 'Interessante! Deixe-me processar isso... Com base no seu histórico e nos dados do sistema, recomendo que possamos explorar essa questão em mais detalhes. O que especificamente você gostaria de saber?', 'Ótima pergunta! Para te dar a melhor resposta possível, preciso entender melhor o contexto. Você pode me fornecer mais informações sobre o que está buscando?', 'Estou analisando sua solicitação. Baseado nos dados do sistema Xertica, posso te ajudar com isso. Você gostaria de uma análise rápida ou um relatório completo?', ]; return respostasGenericas[Math.floor(Math.random() * respostasGenericas.length)]; };