export interface ToolResult {
  success: boolean;
  output: string;
  error?: string;
}

export interface ManusToolDef {
  name: string;
  description: string;
  parameters: Record<string, { type: string; description: string; required?: boolean }>;
}

export const MANUS_TOOLS: ManusToolDef[] = [
  {
    name: "web_search",
    description: "Pesquisa informações na web usando um termo de busca. Retorna resultados relevantes.",
    parameters: {
      query: { type: "string", description: "O termo de busca", required: true }
    }
  },
  {
    name: "knowledge_query",
    description: "Consulta a base de conhecimento interna da empresa para encontrar documentos e informações relevantes.",
    parameters: {
      query: { type: "string", description: "A pergunta ou termo para buscar na base de conhecimento", required: true }
    }
  },
  {
    name: "erp_query",
    description: "Consulta dados do sistema ERP conectado (clientes, pedidos, estoque, financeiro).",
    parameters: {
      entity: { type: "string", description: "Entidade a consultar: customers, orders, inventory, financial", required: true },
      filter: { type: "string", description: "Filtro opcional (ex: 'status=active')", required: false }
    }
  },
  {
    name: "calculate",
    description: "Executa cálculos matemáticos e análises numéricas.",
    parameters: {
      expression: { type: "string", description: "Expressão matemática ou descrição do cálculo", required: true }
    }
  },
  {
    name: "send_message",
    description: "Envia uma mensagem para um usuário ou grupo no chat interno.",
    parameters: {
      to: { type: "string", description: "Nome ou ID do destinatário", required: true },
      message: { type: "string", description: "Conteúdo da mensagem", required: true }
    }
  },
  {
    name: "generate_report",
    description: "Gera um relatório estruturado com base nos dados coletados.",
    parameters: {
      title: { type: "string", description: "Título do relatório", required: true },
      type: { type: "string", description: "Tipo: summary, detailed, chart", required: true },
      data: { type: "string", description: "Dados ou descrição do conteúdo do relatório", required: true }
    }
  },
  {
    name: "schedule_task",
    description: "Agenda uma tarefa para execução futura.",
    parameters: {
      task: { type: "string", description: "Descrição da tarefa", required: true },
      when: { type: "string", description: "Quando executar (ex: 'tomorrow 9am', 'in 2 hours')", required: true }
    }
  },
  {
    name: "web_browse",
    description: "Acessa e extrai informações de uma página web. Use para consultar sites, ler artigos, ou obter dados online.",
    parameters: {
      url: { type: "string", description: "URL completa da página a acessar (ex: https://example.com)", required: true },
      extract: { type: "string", description: "O que extrair: 'text' (todo texto), 'summary' (resumo), 'links' (lista de links)", required: false }
    }
  },
  {
    name: "analyze_file",
    description: "Analisa o conteúdo de um arquivo anexado pelo usuário.",
    parameters: {
      filename: { type: "string", description: "Nome do arquivo anexado a analisar", required: true },
      question: { type: "string", description: "Pergunta específica sobre o conteúdo do arquivo", required: false }
    }
  },
  {
    name: "crm_query",
    description: "Consulta dados do CRM (parceiros, contratos, comissões, conversas). Use para buscar informações de relacionamento com clientes.",
    parameters: {
      entity: { type: "string", description: "Entidade a consultar: partners, contracts, threads, events, commissions, stats", required: true },
      filter: { type: "string", description: "Filtro opcional (ex: 'status=active', 'tier=gold')", required: false }
    }
  },
  {
    name: "crm_create_event",
    description: "Cria um evento no calendário CRM. Use para agendar reuniões, ligações ou lembretes.",
    parameters: {
      title: { type: "string", description: "Título do evento", required: true },
      type: { type: "string", description: "Tipo: meeting, call, task, reminder", required: true },
      startAt: { type: "string", description: "Data/hora de início (ISO 8601 ou descrição como 'amanhã às 14h')", required: true },
      description: { type: "string", description: "Descrição do evento", required: false }
    }
  },
  {
    name: "crm_send_whatsapp",
    description: "Envia uma mensagem WhatsApp para um contato através do canal CRM conectado.",
    parameters: {
      phone: { type: "string", description: "Número de telefone do destinatário (com DDD)", required: true },
      message: { type: "string", description: "Conteúdo da mensagem", required: true }
    }
  },
  {
    name: "generate_chart",
    description: "Gera um gráfico visual a partir de dados estruturados. O gráfico será renderizado na interface. Use esta ferramenta quando o usuário pedir um gráfico ou visualização.",
    parameters: {
      type: { type: "string", description: "Tipo do gráfico: 'bar' (barras), 'line' (linha), 'pie' (pizza), 'area' (área)", required: true },
      title: { type: "string", description: "Título do gráfico", required: true },
      data: { type: "string", description: "JSON array com os dados. Ex: [{\"name\":\"2023\",\"valor\":1000},{\"name\":\"2024\",\"valor\":1500}]", required: true },
      xKey: { type: "string", description: "Nome do campo para o eixo X (ex: 'name', 'ano', 'mes')", required: true },
      yKeys: { type: "string", description: "Nomes dos campos para o eixo Y separados por vírgula (ex: 'ativo,passivo' ou 'valor')", required: true },
      colors: { type: "string", description: "Cores para cada série separadas por vírgula (ex: '#4caf50,#f44336')", required: false }
    }
  },
  {
    name: "finish",
    description: "Finaliza a execução do agente com uma resposta final para o usuário.",
    parameters: {
      answer: { type: "string", description: "Resposta final para o usuário", required: true },
      chart: { type: "string", description: "JSON opcional com dados de gráfico gerado anteriormente", required: false }
    }
  },
  {
    name: "python_execute",
    description: "Executa código Python em um ambiente seguro. Use para cálculos complexos, análise de dados ou automações.",
    parameters: {
      code: { type: "string", description: "O código Python a ser executado", required: true },
      timeout: { type: "number", description: "Tempo limite em segundos (padrão: 30)", required: false }
    }
  },
  {
    name: "semantic_search",
    description: "Busca informações no grafo de conhecimento por significado semântico. Use para encontrar documentos, mensagens ou dados relacionados.",
    parameters: {
      query: { type: "string", description: "A pergunta ou termo para buscar semanticamente", required: true },
      n_results: { type: "number", description: "Número de resultados (padrão: 5)", required: false }
    }
  },
  {
    name: "read_file",
    description: "Lê o conteúdo de um arquivo do sistema.",
    parameters: {
      path: { type: "string", description: "Caminho do arquivo a ser lido", required: true }
    }
  },
  {
    name: "write_file",
    description: "Escreve conteúdo em um arquivo. Cria o arquivo se não existir.",
    parameters: {
      path: { type: "string", description: "Caminho do arquivo a ser escrito", required: true },
      content: { type: "string", description: "Conteúdo a ser escrito no arquivo", required: true }
    }
  },
  {
    name: "list_files",
    description: "Lista arquivos e diretórios em um caminho.",
    parameters: {
      path: { type: "string", description: "Caminho do diretório a listar", required: true }
    }
  },
  {
    name: "shell",
    description: "Executa um comando no terminal. Use com cuidado para comandos seguros.",
    parameters: {
      command: { type: "string", description: "Comando a ser executado", required: true }
    }
  },
  {
    name: "ask_human",
    description: "Pede aprovação do usuário para uma ação crítica antes de prosseguir.",
    parameters: {
      prompt: { type: "string", description: "Pergunta ou descrição da ação que precisa de aprovação", required: true },
      options: { type: "string", description: "Opções de resposta separadas por vírgula (ex: 'sim,não')", required: false }
    }
  },
  {
    name: "analyze_data",
    description: "Analisa um conjunto de dados usando o Módulo Cientista. Detecta padrões, gera insights e estatísticas.",
    parameters: {
      data: { type: "string", description: "Dados em formato JSON para análise", required: true }
    }
  },
  {
    name: "add_to_knowledge",
    description: "Adiciona um documento ao grafo de conhecimento para futuras buscas semânticas.",
    parameters: {
      doc_id: { type: "string", description: "ID único do documento", required: true },
      content: { type: "string", description: "Conteúdo do documento", required: true },
      type: { type: "string", description: "Tipo do documento: email, message, project, note, etc", required: true }
    }
  },
  {
    name: "run_workflow",
    description: "Executa um workflow BPMN automatizado. Use para processos com múltiplos passos, decisões e ações.",
    parameters: {
      workflow_type: { type: "string", description: "Tipo: approval, data_processing, notification ou spec JSON customizado", required: true },
      data: { type: "string", description: "Dados de entrada para o workflow em formato JSON", required: false }
    }
  },
  {
    name: "rpa_execute",
    description: "Executa automação RPA (robotic process automation) em navegador. Use para preencher formulários, extrair dados de sites, ou automatizar tarefas web.",
    parameters: {
      template: { type: "string", description: "Template: login, scrape_table, form_fill, download_report, nfe_consulta, ou script JSON customizado", required: true },
      params: { type: "string", description: "Parâmetros para o script RPA em formato JSON (ex: {\"url\": \"...\", \"username\": \"...\"})", required: false }
    }
  },
  {
    name: "fiscal_emit",
    description: "Emite documento fiscal (NFe, NFCe) através do Arcadia Plus ERP.",
    parameters: {
      type: { type: "string", description: "Tipo de documento: nfe (nota fiscal) ou nfce (cupom fiscal)", required: true },
      data: { type: "string", description: "Dados da nota fiscal em formato JSON (emitente, destinatario, itens, pagamento)", required: true }
    }
  },
  {
    name: "fiscal_query",
    description: "Consulta situação de documento fiscal no SEFAZ.",
    parameters: {
      chave: { type: "string", description: "Chave de acesso da NFe/NFCe (44 dígitos)", required: true }
    }
  },
  {
    name: "plus_clientes",
    description: "Consulta clientes cadastrados no Arcádia Plus ERP. Use para buscar informações de clientes, contatos, histórico.",
    parameters: {
      filtro: { type: "string", description: "Filtro de busca: nome, CPF/CNPJ, telefone ou email", required: false }
    }
  },
  {
    name: "plus_produtos",
    description: "Consulta produtos cadastrados no Arcádia Plus ERP. Use para verificar estoque, preços, códigos.",
    parameters: {
      filtro: { type: "string", description: "Filtro de busca: nome, código, categoria ou marca", required: false }
    }
  },
  {
    name: "plus_vendas",
    description: "Consulta vendas realizadas no Arcádia Plus ERP. Use para verificar pedidos, faturamento, histórico de vendas.",
    parameters: {
      filtro: { type: "string", description: "Filtro: periodo (hoje, semana, mes), cliente, status", required: false }
    }
  },
  {
    name: "plus_estoque",
    description: "Consulta situação do estoque no Arcádia Plus ERP. Use para verificar quantidades, produtos em falta, movimentações.",
    parameters: {}
  },
  {
    name: "plus_financeiro",
    description: "Consulta dados financeiros do Arcádia Plus ERP: contas a pagar, contas a receber, fluxo de caixa.",
    parameters: {
      tipo: { type: "string", description: "Tipo: pagar, receber, todos", required: false }
    }
  },
  {
    name: "plus_fornecedores",
    description: "Consulta fornecedores cadastrados no Arcádia Plus ERP.",
    parameters: {
      filtro: { type: "string", description: "Filtro de busca: nome, CNPJ, cidade", required: false }
    }
  },
  {
    name: "plus_dashboard",
    description: "Obtém dados do dashboard do Arcádia Plus ERP: resumo de vendas, estoque, financeiro.",
    parameters: {}
  },
  {
    name: "learn_url",
    description: "Aprende o conteúdo de uma URL e adiciona ao grafo de conhecimento. Use para absorver informações de artigos, documentações, notícias, etc.",
    parameters: {
      url: { type: "string", description: "A URL para aprender (ex: https://exemplo.com/artigo)", required: true },
      priority: { type: "string", description: "Prioridade do aprendizado: low, normal, high", required: false }
    }
  },
  {
    name: "deep_research",
    description: "Pesquisa profunda sobre um tema: busca na web, extrai conteúdo dos melhores resultados, analisa e sintetiza. Use quando precisar de informações completas sobre um assunto.",
    parameters: {
      topic: { type: "string", description: "O tema ou pergunta para pesquisar em profundidade", required: true },
      depth: { type: "number", description: "Quantidade de fontes para analisar (1-5). Padrão: 3", required: false }
    }
  },
  {
    name: "detect_opportunities",
    description: "Analisa o grafo de conhecimento para detectar padrões e oportunidades de negócio.",
    parameters: {
      domain: { type: "string", description: "Domínio de análise (ex: vendas, produto, suporte, clientes)", required: true },
      min_confidence: { type: "number", description: "Confiança mínima (0-1). Padrão: 0.7", required: false }
    }
  },
  {
    name: "scientist_generate_code",
    description: "Usa o Módulo Cientista para gerar código Python automaticamente baseado em um objetivo. Use para criar análises, transformações ou processamentos de dados.",
    parameters: {
      goal: { type: "string", description: "Objetivo do código (ex: 'agregar vendas por mês', 'filtrar clientes inativos', 'gerar relatório')", required: true },
      data_description: { type: "string", description: "Descrição dos dados de entrada (colunas, tipos)", required: false }
    }
  },
  {
    name: "scientist_generate_automation",
    description: "Gera código de automação para tarefas repetitivas como enviar emails, fazer requisições API, processar arquivos ou agendar tarefas.",
    parameters: {
      task: { type: "string", description: "Descrição da tarefa de automação (ex: 'enviar email de lembrete', 'buscar dados de API')", required: true }
    }
  },
  {
    name: "scientist_detect_patterns",
    description: "Detecta padrões, correlações e tendências em um conjunto de dados.",
    parameters: {
      data: { type: "string", description: "Dados em formato JSON para análise de padrões", required: true }
    }
  },
  {
    name: "scientist_suggest_improvements",
    description: "Analisa dados e sugere melhorias de qualidade, otimizações e correções automáticas.",
    parameters: {
      data: { type: "string", description: "Dados em formato JSON para análise de melhorias", required: true }
    }
  },
  {
    name: "bi_stats",
    description: "Obtém estatísticas do módulo de Business Intelligence (fontes de dados, datasets, gráficos, dashboards, backups).",
    parameters: {}
  },
  {
    name: "bi_list_data_sources",
    description: "Lista todas as fontes de dados configuradas no BI (PostgreSQL, MySQL, MongoDB).",
    parameters: {}
  },
  {
    name: "bi_create_data_source",
    description: "Cria uma nova fonte de dados para conectar o BI a um banco de dados externo.",
    parameters: {
      name: { type: "string", description: "Nome da fonte de dados", required: true },
      type: { type: "string", description: "Tipo: postgresql, mysql ou mongodb", required: true },
      host: { type: "string", description: "Host do servidor de banco de dados", required: true },
      port: { type: "number", description: "Porta do servidor", required: true },
      database: { type: "string", description: "Nome do banco de dados", required: true },
      username: { type: "string", description: "Usuário de acesso", required: true },
      password: { type: "string", description: "Senha de acesso", required: true }
    }
  },
  {
    name: "bi_list_datasets",
    description: "Lista todos os datasets (consultas salvas) configurados no BI.",
    parameters: {}
  },
  {
    name: "bi_create_dataset",
    description: "Cria um novo dataset (consulta SQL ou seleção de tabela) no BI.",
    parameters: {
      name: { type: "string", description: "Nome do dataset", required: true },
      type: { type: "string", description: "Tipo: sql (consulta SQL) ou table (tabela inteira)", required: true },
      dataSourceId: { type: "number", description: "ID da fonte de dados (use bi_list_data_sources para obter)", required: false },
      query: { type: "string", description: "Consulta SQL (para type=sql)", required: false },
      tableName: { type: "string", description: "Nome da tabela (para type=table)", required: false }
    }
  },
  {
    name: "bi_execute_query",
    description: "Executa um dataset e retorna os dados resultantes.",
    parameters: {
      datasetId: { type: "number", description: "ID do dataset a executar", required: true }
    }
  },
  {
    name: "bi_list_charts",
    description: "Lista todos os gráficos criados no BI.",
    parameters: {}
  },
  {
    name: "bi_create_chart",
    description: "Cria um novo gráfico no módulo de BI baseado em um dataset existente.",
    parameters: {
      name: { type: "string", description: "Nome do gráfico", required: true },
      type: { type: "string", description: "Tipo: bar, line, pie, area, scatter, table", required: true },
      datasetId: { type: "number", description: "ID do dataset fonte dos dados", required: true },
      config: { type: "string", description: "Configuração JSON: {xAxis, yAxis, groupBy, aggregation, colors}", required: true }
    }
  },
  {
    name: "bi_list_dashboards",
    description: "Lista todos os dashboards do BI.",
    parameters: {}
  },
  {
    name: "bi_create_dashboard",
    description: "Cria um novo dashboard no BI para organizar gráficos.",
    parameters: {
      name: { type: "string", description: "Nome do dashboard", required: true },
      description: { type: "string", description: "Descrição do dashboard", required: false }
    }
  },
  {
    name: "bi_add_chart_to_dashboard",
    description: "Adiciona um gráfico existente a um dashboard.",
    parameters: {
      dashboardId: { type: "number", description: "ID do dashboard", required: true },
      chartId: { type: "number", description: "ID do gráfico a adicionar", required: true },
      position: { type: "string", description: "Posição JSON: {x, y, width, height}", required: false }
    }
  },
  {
    name: "bi_list_tables",
    description: "Lista todas as tabelas disponíveis no banco de dados interno.",
    parameters: {}
  },
  {
    name: "bi_get_table_columns",
    description: "Obtém as colunas de uma tabela específica.",
    parameters: {
      tableName: { type: "string", description: "Nome da tabela", required: true }
    }
  },
  {
    name: "bi_analyze_with_pandas",
    description: "Analisa dados de um dataset usando Python/Pandas. Retorna estatísticas avançadas: média, mediana, desvio padrão, correlações, outliers, e sugestões de gráficos. Use para análises profundas de dados.",
    parameters: {
      datasetId: { type: "number", description: "ID do dataset a analisar (use bi_list_datasets para obter)", required: true },
      question: { type: "string", description: "Pergunta específica sobre os dados (opcional)", required: false }
    }
  },
  {
    name: "metaset_query",
    description: "Executa uma consulta SQL via motor de BI (MetaSet). Motor robusto para análises complexas, gráficos e dashboards. Retorna dados estruturados.",
    parameters: {
      query: { type: "string", description: "Consulta SQL (apenas SELECT)", required: true },
      limit: { type: "number", description: "Limite de linhas (padrão: 100)", required: false }
    }
  },
  {
    name: "metaset_create_question",
    description: "Cria uma pergunta/consulta persistente no motor de BI (MetaSet). A pergunta fica salva e pode ser adicionada a dashboards e visualizada como gráfico.",
    parameters: {
      name: { type: "string", description: "Nome da pergunta/consulta", required: true },
      query: { type: "string", description: "Consulta SQL da pergunta", required: true },
      chartType: { type: "string", description: "Tipo de visualização: table, bar, line, pie, area, scatter, row, scalar", required: false },
      description: { type: "string", description: "Descrição da pergunta", required: false }
    }
  },
  {
    name: "metaset_list_questions",
    description: "Lista todas as perguntas/consultas salvas no motor de BI (MetaSet).",
    parameters: {}
  },
  {
    name: "metaset_run_question",
    description: "Executa uma pergunta salva no motor de BI e retorna dados atualizados.",
    parameters: {
      questionId: { type: "number", description: "ID da pergunta a executar", required: true }
    }
  },
  {
    name: "metaset_create_dashboard",
    description: "Cria um novo dashboard no motor de BI (MetaSet) para organizar consultas e gráficos.",
    parameters: {
      name: { type: "string", description: "Nome do dashboard", required: true },
      description: { type: "string", description: "Descrição do dashboard", required: false }
    }
  },
  {
    name: "metaset_list_dashboards",
    description: "Lista todos os dashboards do motor de BI (MetaSet).",
    parameters: {}
  },
  {
    name: "metaset_add_to_dashboard",
    description: "Adiciona uma pergunta/gráfico a um dashboard no motor de BI.",
    parameters: {
      dashboardId: { type: "number", description: "ID do dashboard", required: true },
      questionId: { type: "number", description: "ID da pergunta a adicionar", required: true }
    }
  },
  {
    name: "metaset_suggest_analysis",
    description: "Sugere consultas e tipos de gráfico para uma tabela. Útil para descoberta automática de insights.",
    parameters: {
      tableName: { type: "string", description: "Nome da tabela para analisar", required: true }
    }
  },
  {
    name: "fin_query_payables",
    description: "Consulta contas a pagar do módulo Financeiro. Retorna lista de títulos com vencimentos, valores e status.",
    parameters: {
      status: { type: "string", description: "Filtro por status: pending, paid, overdue, cancelled (opcional)", required: false },
      supplier_id: { type: "number", description: "Filtro por ID do fornecedor (opcional)", required: false }
    }
  },
  {
    name: "fin_query_receivables",
    description: "Consulta contas a receber do módulo Financeiro. Retorna lista de títulos com vencimentos, valores e status.",
    parameters: {
      status: { type: "string", description: "Filtro por status: pending, received, overdue, cancelled (opcional)", required: false },
      customer_id: { type: "number", description: "Filtro por ID do cliente (opcional)", required: false }
    }
  },
  {
    name: "fin_query_bank_accounts",
    description: "Consulta contas bancárias e saldos do módulo Financeiro.",
    parameters: {
      active_only: { type: "boolean", description: "Retornar apenas contas ativas (padrão: true)", required: false }
    }
  },
  {
    name: "fin_query_cashflow",
    description: "Consulta fluxo de caixa (transações) do módulo Financeiro em um período.",
    parameters: {
      start_date: { type: "string", description: "Data inicial no formato YYYY-MM-DD", required: false },
      end_date: { type: "string", description: "Data final no formato YYYY-MM-DD", required: false },
      account_id: { type: "number", description: "Filtro por conta bancária (opcional)", required: false }
    }
  },
  {
    name: "fin_summary",
    description: "Obtém resumo financeiro: total a pagar, total a receber, saldo em contas, vencimentos próximos.",
    parameters: {}
  },
  {
    name: "fin_register_payable",
    description: "Registra uma nova conta a pagar no módulo Financeiro.",
    parameters: {
      supplier_id: { type: "number", description: "ID do fornecedor", required: true },
      description: { type: "string", description: "Descrição do título", required: true },
      amount: { type: "number", description: "Valor do título", required: true },
      due_date: { type: "string", description: "Data de vencimento (YYYY-MM-DD)", required: true },
      category_id: { type: "number", description: "ID da categoria de fluxo de caixa (opcional)", required: false }
    }
  },
  {
    name: "fin_register_receivable",
    description: "Registra uma nova conta a receber no módulo Financeiro.",
    parameters: {
      customer_id: { type: "number", description: "ID do cliente", required: true },
      description: { type: "string", description: "Descrição do título", required: true },
      amount: { type: "number", description: "Valor do título", required: true },
      due_date: { type: "string", description: "Data de vencimento (YYYY-MM-DD)", required: true },
      category_id: { type: "number", description: "ID da categoria de fluxo de caixa (opcional)", required: false }
    }
  },
  {
    name: "fin_pay_account",
    description: "Registra o pagamento de uma conta a pagar.",
    parameters: {
      payable_id: { type: "number", description: "ID da conta a pagar", required: true },
      bank_account_id: { type: "number", description: "ID da conta bancária de saída", required: true },
      payment_date: { type: "string", description: "Data do pagamento (YYYY-MM-DD)", required: false },
      amount_paid: { type: "number", description: "Valor pago (se diferente do valor original)", required: false }
    }
  },
  {
    name: "fin_receive_account",
    description: "Registra o recebimento de uma conta a receber.",
    parameters: {
      receivable_id: { type: "number", description: "ID da conta a receber", required: true },
      bank_account_id: { type: "number", description: "ID da conta bancária de entrada", required: true },
      receive_date: { type: "string", description: "Data do recebimento (YYYY-MM-DD)", required: false },
      amount_received: { type: "number", description: "Valor recebido (se diferente do valor original)", required: false }
    }
  },
  {
    name: "call_agent",
    description: "Envia uma mensagem para outro agente de IA externo via protocolo A2A. Use para delegar tarefas especializadas, consultar agentes especializados ou orquestrar múltiplos agentes.",
    parameters: {
      agent_id: { type: "string", description: "ID do agente a chamar (use list_agents para ver disponíveis)", required: true },
      message: { type: "string", description: "Mensagem/pergunta a enviar ao agente", required: true },
      wait_response: { type: "boolean", description: "Aguardar resposta completa (padrão: true)", required: false }
    }
  },
  {
    name: "list_agents",
    description: "Lista todos os agentes de IA externos registrados e disponíveis para comunicação via A2A.",
    parameters: {}
  },
  {
    name: "register_agent",
    description: "Registra um novo agente externo para comunicação. Descobre automaticamente o Agent Card do agente.",
    parameters: {
      name: { type: "string", description: "Nome amigável para o agente", required: true },
      url: { type: "string", description: "URL base do agente (ex: https://agent.exemplo.com)", required: true },
      api_key: { type: "string", description: "API Key para autenticação (se necessário)", required: false }
    }
  },
  {
    name: "discover_agent",
    description: "Descobre as capacidades de um agente externo lendo seu Agent Card. Use para saber o que um agente pode fazer antes de chamá-lo.",
    parameters: {
      url: { type: "string", description: "URL base do agente para descoberta", required: true }
    }
  },
  {
    name: "export_to_excel",
    description: "Exporta dados para um arquivo Excel (.xlsx). Retorna o caminho do arquivo gerado para download. Use quando o usuário pedir para exportar dados, gerar planilha ou criar Excel.",
    parameters: {
      data: { type: "string", description: "Dados em formato JSON array para exportar (ex: [{\"coluna1\":\"valor1\"}])", required: true },
      filename: { type: "string", description: "Nome do arquivo sem extensão (ex: 'relatorio-vendas')", required: true },
      sheet_name: { type: "string", description: "Nome da aba/planilha (padrão: 'Dados')", required: false }
    }
  },
  {
    name: "send_to_bi_dataset",
    description: "Envia dados para criar ou atualizar um dataset no módulo de BI (Arcádia Insights). Os dados ficam disponíveis para criar gráficos e dashboards.",
    parameters: {
      name: { type: "string", description: "Nome do dataset no BI", required: true },
      data: { type: "string", description: "Dados em formato JSON array para o dataset", required: true },
      description: { type: "string", description: "Descrição do dataset (opcional)", required: false },
      update_if_exists: { type: "boolean", description: "Atualizar se já existir (padrão: true)", required: false }
    }
  },
  {
    name: "market_research",
    description: "Faz pesquisa de mercado sobre um setor, concorrentes ou tendências. Busca dados comparativos, benchmarks do setor e informações competitivas.",
    parameters: {
      topic: { type: "string", description: "O tema da pesquisa (ex: 'concorrentes no setor de logística', 'benchmarks de margem de lucro varejo')", required: true },
      company_context: { type: "string", description: "Contexto da empresa para comparação (setor, tamanho, região)", required: false },
      focus: { type: "string", description: "Foco da pesquisa: competitors, benchmarks, trends, all (padrão: all)", required: false }
    }
  },
  {
    name: "compare_with_market",
    description: "Compara dados financeiros ou operacionais da empresa com benchmarks de mercado. Útil para análise de desempenho relativo.",
    parameters: {
      metric: { type: "string", description: "Métrica a comparar (ex: 'margem_lucro', 'ticket_medio', 'crescimento_receita')", required: true },
      value: { type: "number", description: "Valor atual da empresa para a métrica", required: true },
      sector: { type: "string", description: "Setor de atuação para benchmark", required: true },
      period: { type: "string", description: "Período de referência (ex: '2024', 'Q1 2024')", required: false }
    }
  },
  // ERPNext Integration Tools
  {
    name: "erpnext_status",
    description: "Verifica o status da conexão com o ERPNext. Retorna se está conectado e o usuário autenticado.",
    parameters: {}
  },
  {
    name: "erpnext_list_doctypes",
    description: "Lista todos os DocTypes (entidades) disponíveis no ERPNext. Use para descobrir quais dados podem ser consultados.",
    parameters: {
      limit: { type: "number", description: "Número máximo de DocTypes a retornar (padrão: 50)", required: false }
    }
  },
  {
    name: "erpnext_get_documents",
    description: "Busca documentos de um DocType específico no ERPNext. Use para consultar clientes, vendas, produtos, etc.",
    parameters: {
      doctype: { type: "string", description: "Nome do DocType (ex: 'Customer', 'Sales Invoice', 'Item')", required: true },
      filters: { type: "string", description: "Filtros em formato JSON (ex: '{\"status\":\"Active\"}')", required: false },
      fields: { type: "string", description: "Campos a retornar separados por vírgula (ex: 'name,customer_name,status')", required: false },
      limit: { type: "number", description: "Número máximo de registros (padrão: 20)", required: false }
    }
  },
  {
    name: "erpnext_get_document",
    description: "Busca um documento específico do ERPNext pelo nome/ID.",
    parameters: {
      doctype: { type: "string", description: "Nome do DocType (ex: 'Customer', 'Sales Invoice')", required: true },
      name: { type: "string", description: "Nome/ID do documento", required: true }
    }
  },
  {
    name: "erpnext_create_document",
    description: "Cria um novo documento no ERPNext.",
    parameters: {
      doctype: { type: "string", description: "Nome do DocType (ex: 'Customer', 'Item')", required: true },
      data: { type: "string", description: "Dados do documento em formato JSON", required: true }
    }
  },
  {
    name: "erpnext_update_document",
    description: "Atualiza um documento existente no ERPNext.",
    parameters: {
      doctype: { type: "string", description: "Nome do DocType", required: true },
      name: { type: "string", description: "Nome/ID do documento a atualizar", required: true },
      data: { type: "string", description: "Dados a atualizar em formato JSON", required: true }
    }
  },
  {
    name: "erpnext_search",
    description: "Pesquisa documentos no ERPNext por texto. Busca em campos de texto do DocType.",
    parameters: {
      doctype: { type: "string", description: "Nome do DocType para pesquisar", required: true },
      search_term: { type: "string", description: "Termo de busca", required: true },
      limit: { type: "number", description: "Número máximo de resultados (padrão: 20)", required: false }
    }
  },
  {
    name: "erpnext_run_report",
    description: "Executa um relatório do ERPNext. Use para obter dados agregados e análises.",
    parameters: {
      report_name: { type: "string", description: "Nome do relatório (ex: 'Accounts Receivable', 'Stock Balance')", required: true },
      filters: { type: "string", description: "Filtros do relatório em formato JSON", required: false }
    }
  },
  {
    name: "erpnext_call_method",
    description: "Chama um método/API customizado do ERPNext/Frappe.",
    parameters: {
      method: { type: "string", description: "Nome do método (ex: 'frappe.client.get_count')", required: true },
      args: { type: "string", description: "Argumentos em formato JSON", required: false }
    }
  },
  // ========== ARCÁDIA RETAIL TOOLS ==========
  {
    name: "retail_query",
    description: "Consulta dados do módulo Arcádia Retail (vendas PDV, dispositivos/celulares, avaliações Trade-In, ordens de serviço, comissões, créditos de clientes).",
    parameters: {
      entity: { type: "string", description: "Entidade: sales, devices, evaluations, service_orders, commissions, credits, sellers, stores", required: true },
      filter: { type: "string", description: "Filtro opcional (ex: 'status=completed', 'date=today', 'customer_id=4')", required: false },
      limit: { type: "number", description: "Limite de resultados (padrão: 20)", required: false }
    }
  },
  {
    name: "retail_stats",
    description: "Obtém estatísticas e KPIs do Retail em tempo real: vendas do dia, estoque, O.S. abertas, avaliações pendentes.",
    parameters: {
      period: { type: "string", description: "Período: today, week, month, year (padrão: today)", required: false },
      storeId: { type: "number", description: "ID da loja para filtrar (opcional)", required: false }
    }
  },
  {
    name: "retail_report",
    description: "Gera relatórios analíticos do Retail com insights e recomendações.",
    parameters: {
      type: { type: "string", description: "Tipo: sales_summary, inventory_status, commission_report, trade_in_analysis, service_orders_pending", required: true },
      dateFrom: { type: "string", description: "Data inicial (YYYY-MM-DD)", required: false },
      dateTo: { type: "string", description: "Data final (YYYY-MM-DD)", required: false },
      storeId: { type: "number", description: "ID da loja para filtrar", required: false }
    }
  },
  {
    name: "automation_trigger",
    description: "Dispara uma automação existente ou emite um evento no barramento. Use para encadear automações, disparar workflows CRM, ou emitir eventos personalizados que ativam outras automações.",
    parameters: {
      automation_id: { type: "number", description: "ID da automação a executar (opcional se usar event_type)", required: false },
      event_type: { type: "string", description: "Tipo de evento a emitir no barramento: crm.contact.created, crm.deal.stage_changed, crm.ticket.created, crm.message.received, manual.trigger, system.event, etc.", required: false },
      payload: { type: "string", description: "Dados adicionais em JSON para passar à automação ou ao evento (ex: '{\"contact_id\": 42, \"stage\": \"qualified\"}')", required: false },
      tenant_id: { type: "number", description: "ID do tenant para automações multi-tenant (xos_automations)", required: false }
    }
  },
  {
    name: "xos_action",
    description: "Executa ações no XOS CRM: criar/atualizar contatos, mover deals no pipeline, criar tickets, atribuir agentes, criar tarefas, enviar campanhas. Use para automatizar operações de CRM via IA.",
    parameters: {
      action: { type: "string", description: "Ação a executar: create_contact, update_contact, create_deal, move_deal_stage, create_ticket, assign_agent, create_task, create_activity, send_campaign, create_note", required: true },
      data: { type: "string", description: "Dados para a ação em JSON. Ex: create_contact: '{\"name\":\"João\",\"email\":\"joao@ex.com\",\"type\":\"lead\"}'; move_deal_stage: '{\"deal_id\":5,\"stage_id\":3}'; create_ticket: '{\"title\":\"Bug\",\"contact_id\":2,\"priority\":\"high\"}'", required: true }
    }
  },
  {
    name: "inbox_action",
    description: "Executa ações na Central de Atendimento: fechar/transferir conversas, enviar mensagens automáticas, atribuir agentes, adicionar etiquetas, criar protocolos, alterar status de tickets de suporte.",
    parameters: {
      action: { type: "string", description: "Ação: close_conversation, transfer_conversation, send_message, assign_agent, add_label, create_protocol, resolve_ticket, escalate_ticket, send_csat", required: true },
      conversation_id: { type: "number", description: "ID da conversa (obrigatório para ações em conversas existentes)", required: false },
      data: { type: "string", description: "Dados adicionais em JSON. Ex: transfer: '{\"queue_id\":2}'; send_message: '{\"content\":\"Olá!\",\"type\":\"text\"}'; assign_agent: '{\"agent_id\":5}'", required: false }
    }
  }
];

export function getToolsDescription(): string {
  return MANUS_TOOLS.map(tool => {
    const params = Object.entries(tool.parameters)
      .map(([name, p]) => `  - ${name} (${p.type}${p.required ? ', obrigatório' : ', opcional'}): ${p.description}`)
      .join('\n');
    return `${tool.name}: ${tool.description}\n${params}`;
  }).join('\n\n');
}
