/**
 * ============================================================
 *  src/tools/bash/warnings.ts —— 破坏性命令告警扫描
 * ------------------------------------------------------------
 *  对应 kakadeai 主仓库 tools/BashTool/destructiveCommandWarning.ts。
 *
 *  与 bash.ts 里的"黑名单"区别（不要混淆）：
 *   - 黑名单：灾难性命令（rm -rf /、mkfs、shutdown...），命中直接拒绝执行
 *   - 告警扫描："看起来有点危险但合法"的命令（git reset --hard、git push -f、
 *     kubectl delete...），命中后只输出警告字符串、**不阻塞执行**，
 *     让模型/用户看到苗头但保留行动自由。
 *
 *  纯函数模块。
 * ============================================================
 */
const DESTRUCTIVE_PATTERNS = [
    // Git —— 数据丢失 / 难回退
    {
        pattern: /\bgit\s+reset\s+--hard\b/,
        warning: 'Note: may discard uncommitted changes',
    },
    {
        pattern: /\bgit\s+push\b[^;&|\n]*[ \t](--force|--force-with-lease|-f)\b/,
        warning: 'Note: may overwrite remote history',
    },
    {
        pattern: /\bgit\s+clean\b(?![^;&|\n]*(?:-[a-zA-Z]*n|--dry-run))[^;&|\n]*-[a-zA-Z]*f/,
        warning: 'Note: may permanently delete untracked files',
    },
    {
        pattern: /\bgit\s+checkout\s+(--\s+)?\.[ \t]*($|[;&|\n])/,
        warning: 'Note: may discard all working tree changes',
    },
    {
        pattern: /\bgit\s+restore\s+(--\s+)?\.[ \t]*($|[;&|\n])/,
        warning: 'Note: may discard all working tree changes',
    },
    {
        pattern: /\bgit\s+stash[ \t]+(drop|clear)\b/,
        warning: 'Note: may permanently remove stashed changes',
    },
    {
        pattern: /\bgit\s+branch\s+(-D[ \t]|--delete\s+--force|--force\s+--delete)\b/,
        warning: 'Note: may force-delete a branch',
    },
    // Git —— 安全绕过
    {
        pattern: /\bgit\s+(commit|push|merge)\b[^;&|\n]*--no-verify\b/,
        warning: 'Note: may skip safety hooks',
    },
    {
        pattern: /\bgit\s+commit\b[^;&|\n]*--amend\b/,
        warning: 'Note: may rewrite the last commit',
    },
    // 文件删除（rm -rf / 之类的致命形式由 bash.ts 黑名单处理；这里只做"未到致命"的提醒）
    {
        pattern: /(^|[;&|\n]\s*)rm\s+-[a-zA-Z]*[rR][a-zA-Z]*f|(^|[;&|\n]\s*)rm\s+-[a-zA-Z]*f[a-zA-Z]*[rR]/,
        warning: 'Note: may recursively force-remove files',
    },
    {
        pattern: /(^|[;&|\n]\s*)rm\s+-[a-zA-Z]*[rR]/,
        warning: 'Note: may recursively remove files',
    },
    {
        pattern: /(^|[;&|\n]\s*)rm\s+-[a-zA-Z]*f/,
        warning: 'Note: may force-remove files',
    },
    // 数据库
    {
        pattern: /\b(DROP|TRUNCATE)\s+(TABLE|DATABASE|SCHEMA)\b/i,
        warning: 'Note: may drop or truncate database objects',
    },
    {
        pattern: /\bDELETE\s+FROM\s+\w+[ \t]*(;|"|'|\n|$)/i,
        warning: 'Note: may delete all rows from a database table',
    },
    // 基础设施
    {
        pattern: /\bkubectl\s+delete\b/,
        warning: 'Note: may delete Kubernetes resources',
    },
    {
        pattern: /\bterraform\s+destroy\b/,
        warning: 'Note: may destroy Terraform infrastructure',
    },
];
/**
 * 扫描命令是否命中已知破坏性模式。
 * 命中返回人类可读的告警字符串；未命中返回 null。
 * **仅警告，不阻塞**。
 */
export function scanDestructiveCommand(command) {
    for (const { pattern, warning } of DESTRUCTIVE_PATTERNS) {
        if (pattern.test(command))
            return warning;
    }
    return null;
}
