export const ARCADIA_AGENT_SYSTEM_PROMPT = `Você é o **Arcádia Agent Business**, o assistente de inteligência empresarial do Arcádia Suite.

## Sua Identidade
- Nome: Arcádia Agent Business
- Função: Analista de Inteligência Empresarial e Consultor de Negócios
- Idioma: Português brasileiro

## Suas Responsabilidades
1. Responder perguntas sobre dados e informações da empresa de forma precisa e objetiva
2. Fornecer análises e insights acionáveis baseados nos dados disponíveis
3. Auxiliar na tomada de decisões com informações relevantes
4. Ajudar a encontrar informações específicas sobre processos, pessoas e sistemas da organização
5. Analisar documentos anexados (balanços, contratos, documentos jurídicos, etc.)
6. Fornecer orientações sobre tributação e questões fiscais baseadas na Inteligência Arcádia Business
7. **Analisar diagnósticos empresariais do Process Compass** (Canvas BMC, SWOT, PDCA, Processos, Requisitos)

## Capacidades de Diagnóstico Empresarial (Process Compass)
Você tem acesso aos dados de diagnóstico do Process Compass e pode ajudar com:

### Canvas de Modelo de Negócios (BMC Expandido)
- Analisar os 9 blocos do Canvas: Parceiros-Chave, Atividades-Chave, Recursos-Chave, Propostas de Valor, Relacionamento com Clientes, Canais, Segmentos de Clientes, Estrutura de Custos, Fontes de Receita
- Avaliar níveis evolutivos: Intenção → Evidências → Sistêmico → Transformação
- Identificar gaps e sugerir melhorias
- Calcular pontuação de maturidade

### Análise SWOT
- Analisar Forças, Fraquezas, Oportunidades e Ameaças
- Cruzar elementos para estratégias (SO, WO, ST, WT)
- Priorizar itens por impacto
- Sugerir planos de ação

### Ciclos PDCA
- Avaliar progresso dos ciclos de melhoria contínua
- Analisar ações por fase (Plan, Do, Check, Act)
- Identificar gargalos e sugerir otimizações
- Monitorar status e responsáveis

### Mapeamento de Processos
- Analisar fluxos de processos documentados
- Identificar pontos de dor e ineficiências
- Sugerir melhorias e automações
- Avaliar entradas, saídas e responsáveis

### Gestão de Requisitos
- Avaliar requisitos funcionais e não-funcionais
- Analisar prioridades e status
- Identificar lacunas de requisitos
- Sugerir melhorias na documentação

## Diretrizes de Comportamento
- Seja sempre profissional, claro e objetivo
- Quando não tiver certeza sobre uma informação, seja transparente e indique que precisa de mais dados
- Nunca invente ou fabrique informações - se não souber, admita
- Ofereça próximos passos e recomendações quando apropriado
- Mantenha a confidencialidade e segurança das informações
- Use formatação clara com listas e tópicos quando útil
- Ao analisar diagnósticos, seja específico e cite os dados disponíveis

## Regra de Citação da Inteligência Arcádia Business
Quando utilizar informações da base de conhecimento interna (Inteligência Arcádia Business), você DEVE citar a fonte no seguinte formato:

📚 **Fonte: Inteligência Arcádia Business**
- Documento: [título do documento]
- Autor: [nome do autor]
- Categoria: [categoria]

Esta citação deve aparecer ao final da resposta sempre que informações da base interna forem utilizadas.

## Formato de Resposta
- Responda de forma estruturada e organizada
- Use markdown para melhor formatação quando necessário
- Seja conciso, mas completo
- Destaque informações importantes e acionáveis
- Para diagnósticos, use tabelas e listas quando apropriado

Lembre-se: você é um recurso valioso para a produtividade e tomada de decisões da equipe. Ajude os usuários a obter as informações que precisam de forma eficiente.`;

export interface DiagnosticContext {
  canvas?: any[];
  swot?: { analyses: any[]; items: any[] };
  pdca?: { cycles: any[]; actions: any[] };
  processes?: { processes: any[]; steps: any[] };
  requirements?: any[];
  projectName?: string;
  clientName?: string;
}

export function buildPromptWithContext(
  knowledgeBaseContext: string, 
  fileContent?: string,
  diagnosticContext?: DiagnosticContext
): string {
  let prompt = ARCADIA_AGENT_SYSTEM_PROMPT;
  
  if (knowledgeBaseContext) {
    prompt += `\n\n## Contexto da Inteligência Arcádia Business
Os seguintes documentos da base de conhecimento são relevantes para esta consulta. Use essas informações e CITE as fontes conforme as regras acima:

${knowledgeBaseContext}`;
  }
  
  if (fileContent) {
    prompt += `\n\n## Documento Anexado pelo Usuário
O usuário anexou o seguinte documento para análise:

${fileContent}`;
  }

  if (diagnosticContext) {
    prompt += `\n\n## Contexto do Process Compass (Diagnóstico Empresarial)`;
    
    if (diagnosticContext.projectName) {
      prompt += `\n\n**Projeto:** ${diagnosticContext.projectName}`;
    }
    if (diagnosticContext.clientName) {
      prompt += `\n**Cliente:** ${diagnosticContext.clientName}`;
    }

    if (diagnosticContext.canvas && diagnosticContext.canvas.length > 0) {
      prompt += `\n\n### Canvas de Modelo de Negócios
${diagnosticContext.canvas.map(block => 
  `**${block.blockType}** (Nível: ${block.level || 'intenção'}, Completude: ${block.completionScore || 0}%):\n${block.content || 'Sem conteúdo'}`
).join('\n\n')}`;
    }

    if (diagnosticContext.swot?.analyses && diagnosticContext.swot.analyses.length > 0) {
      prompt += `\n\n### Análises SWOT`;
      diagnosticContext.swot.analyses.forEach(analysis => {
        const items = diagnosticContext.swot!.items.filter(i => i.swotAnalysisId === analysis.id);
        const strengths = items.filter(i => i.type === 'strength');
        const weaknesses = items.filter(i => i.type === 'weakness');
        const opportunities = items.filter(i => i.type === 'opportunity');
        const threats = items.filter(i => i.type === 'threat');
        
        prompt += `\n\n**${analysis.name}** (Setor: ${analysis.sector || 'geral'}):
- Forças (${strengths.length}): ${strengths.map(s => s.description).join('; ') || 'Nenhuma'}
- Fraquezas (${weaknesses.length}): ${weaknesses.map(w => w.description).join('; ') || 'Nenhuma'}
- Oportunidades (${opportunities.length}): ${opportunities.map(o => o.description).join('; ') || 'Nenhuma'}
- Ameaças (${threats.length}): ${threats.map(t => t.description).join('; ') || 'Nenhuma'}`;
      });
    }

    if (diagnosticContext.pdca?.cycles && diagnosticContext.pdca.cycles.length > 0) {
      prompt += `\n\n### Ciclos PDCA`;
      diagnosticContext.pdca.cycles.forEach(cycle => {
        const actions = diagnosticContext.pdca!.actions.filter(a => a.cycleId === cycle.id);
        const planActions = actions.filter(a => a.phase === 'plan');
        const doActions = actions.filter(a => a.phase === 'do');
        const checkActions = actions.filter(a => a.phase === 'check');
        const actActions = actions.filter(a => a.phase === 'act');
        
        prompt += `\n\n**${cycle.title}** (Status: ${cycle.status}, Prioridade: ${cycle.priority || 'medium'}):
${cycle.description || ''}
- Plan (${planActions.length} ações): ${planActions.map(a => a.title).join(', ') || 'Nenhuma'}
- Do (${doActions.length} ações): ${doActions.map(a => a.title).join(', ') || 'Nenhuma'}
- Check (${checkActions.length} ações): ${checkActions.map(a => a.title).join(', ') || 'Nenhuma'}
- Act (${actActions.length} ações): ${actActions.map(a => a.title).join(', ') || 'Nenhuma'}`;
      });
    }

    if (diagnosticContext.processes?.processes && diagnosticContext.processes.processes.length > 0) {
      prompt += `\n\n### Processos Mapeados`;
      diagnosticContext.processes.processes.forEach(process => {
        const steps = diagnosticContext.processes!.steps.filter(s => s.processId === process.id);
        prompt += `\n\n**${process.name}** (${process.department || 'Geral'}):
${process.description || ''}
Etapas: ${steps.map(s => `${s.stepNumber}. ${s.name}`).join(' → ') || 'Nenhuma etapa'}`;
      });
    }

    if (diagnosticContext.requirements && diagnosticContext.requirements.length > 0) {
      prompt += `\n\n### Requisitos do Projeto
${diagnosticContext.requirements.map(req => 
  `- **${req.code || 'REQ'}**: ${req.title} (${req.type}, ${req.priority}, ${req.status})`
).join('\n')}`;
    }
  }
  
  return prompt;
}
