// bot/src/agentPrompt.ts — Carrega o prompt de um subagent SDD.
//
// Reaproveita as MESMAS instruções que o Claude Code usa (.claude/agents/<name>.md)
// para que o bot, ao elaborar um artefato via LLM, produza conteúdo com a mesma
// estrutura e qualidade do subagent (ex.: as 7+ seções da etapa de ideia), em vez
// do esqueleto que o `sdd <stage>` devolve. Puro Node, cross-plataforma.

import fs from 'node:fs'
import path from 'node:path'

/**
 * Lê o corpo do prompt de um subagent (sem o frontmatter YAML).
 * Procura em .claude/agents/<name>.md e, como fallback, em .agents/agents/<name>.md.
 * Retorna null se nenhum arquivo for encontrado.
 */
export function loadAgentPrompt(projectRoot: string, agentName: string): string | null {
  const candidates = [
    path.join(projectRoot, '.claude', 'agents', `${agentName}.md`),
    path.join(projectRoot, '.agents', 'agents', `${agentName}.md`),
  ]

  for (const file of candidates) {
    try {
      if (fs.existsSync(file)) {
        const raw = fs.readFileSync(file, 'utf8')
        const body = stripFrontmatter(raw).trim()
        if (body.length > 0) return body
      }
    } catch {
      // ignora e tenta o próximo candidato
    }
  }
  return null
}

/** Remove o bloco de frontmatter YAML (--- ... ---) do início, se houver. */
function stripFrontmatter(text: string): string {
  if (!text.startsWith('---')) return text
  const closing = text.indexOf('\n---', 3)
  if (closing === -1) return text
  const afterClosing = text.indexOf('\n', closing + 1)
  return afterClosing === -1 ? '' : text.slice(afterClosing + 1)
}
