/**
 * SDD Security Scan Plugin
 *
 * Hook opt-in para OpenCode: bloqueia edições diretas em arquivos sensíveis.
 * O contrato SDD continua no CLI; este plugin só reduz risco operacional.
 */

const SENSITIVE_FILES: RegExp[] = [
  /(^|\/)\.env$/,
  /(^|\/)\.env\./,
  /credentials/i,
  /secrets/i,
  /private[_-]?key/i,
  /\.pem$/,
  /\.key$/,
  /id_rsa/,
  /id_ed25519/,
]

function isSensitiveFile(filePath: string): boolean {
  return SENSITIVE_FILES.some((pattern) => pattern.test(filePath))
}

export const SddSecurityScanPlugin = async () => {
  return {
    "tool.execute.before": async (input: any) => {
      if (!["write", "edit", "patch"].includes(input.tool)) return

      const filePath =
        input.args?.file_path || input.args?.filePath || input.args?.path || ""

      if (filePath && isSensitiveFile(filePath)) {
        throw new Error(
          `SDD SECURITY BLOCK: edição direta de arquivo sensível bloqueada (${filePath}). Use fluxo manual seguro e registre evidência.`
        )
      }
    },
  }
}

export default SddSecurityScanPlugin
