import { sandboxListCommand, sandboxRecreateCommand } from "../commands/sandbox.js";
import { sandboxExplainCommand } from "../commands/sandbox-explain.js";
import { defaultRuntime } from "../runtime.js";
import { formatDocsLink } from "../terminal/links.js";
import { theme } from "../terminal/theme.js";
import { formatHelpExamples } from "./help-format.js";
// --- Helpers ---
const SANDBOX_EXAMPLES = {
    main: [
        ["openclaw-cn sandbox list", "List all sandbox containers."],
        ["openclaw-cn sandbox list --browser", "List only browser containers."],
        ["openclaw-cn sandbox recreate --all", "Recreate all containers."],
        ["openclaw-cn sandbox recreate --session main", "Recreate a specific session."],
        ["openclaw-cn sandbox recreate --agent mybot", "Recreate agent containers."],
        ["openclaw-cn sandbox explain", "Explain effective sandbox config."],
    ],
    list: [
        ["openclaw-cn sandbox list", "List all sandbox containers."],
        ["openclaw-cn sandbox list --browser", "List only browser containers."],
        ["openclaw-cn sandbox list --json", "JSON output."],
    ],
    recreate: [
        ["openclaw-cn sandbox recreate --all", "Recreate all containers."],
        ["openclaw-cn sandbox recreate --session main", "Recreate a specific session."],
        [
            "openclaw-cn sandbox recreate --agent mybot",
            "Recreate a specific agent (includes sub-agents).",
        ],
        ["openclaw-cn sandbox recreate --browser --all", "Recreate only browser containers."],
        ["openclaw-cn sandbox recreate --all --force", "Skip confirmation."],
    ],
    explain: [
        ["openclaw-cn sandbox explain", "Show effective sandbox config."],
        ["openclaw-cn sandbox explain --session agent:main:main", "Explain a specific session."],
        ["openclaw-cn sandbox explain --agent work", "Explain an agent sandbox."],
        ["openclaw-cn sandbox explain --json", "JSON output."],
    ],
};
function createRunner(commandFn) {
    return async (opts) => {
        try {
            await commandFn(opts, defaultRuntime);
        }
        catch (err) {
            defaultRuntime.error(String(err));
            defaultRuntime.exit(1);
        }
    };
}
// --- Registration ---
export function registerSandboxCli(program) {
    const sandbox = program
        .command("sandbox")
        .description("管理沙箱容器（基于 Docker 的智能体隔离）")
        .addHelpText("after", () => `\n${theme.heading("Examples:")}\n${formatHelpExamples(SANDBOX_EXAMPLES.main)}\n`)
        .addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/sandbox", "docs.clawd.bot/cli/sandbox")}\n`)
        .action(() => {
        sandbox.help({ error: true });
    });
    // --- List Command ---
    sandbox
        .command("list")
        .description("List sandbox containers and their status")
        .option("--json", "Output result as JSON", false)
        .option("--browser", "List browser containers only", false)
        .addHelpText("after", () => `
${theme.heading("Examples:")}
${formatHelpExamples(SANDBOX_EXAMPLES.list)}

${theme.heading("Output includes:")}\n${theme.muted("- Container name and status (running/stopped)")}\n${theme.muted("- Docker image and whether it matches current config")}\n${theme.muted("- Age (time since creation)")}\n${theme.muted("- Idle time (time since last use)")}\n${theme.muted("- Associated session/agent ID")}`)
        .action(createRunner((opts) => sandboxListCommand({
        browser: Boolean(opts.browser),
        json: Boolean(opts.json),
    }, defaultRuntime)));
    // --- Recreate Command ---
    sandbox
        .command("recreate")
        .description("Remove containers to force recreation with updated config")
        .option("--all", "Recreate all sandbox containers", false)
        .option("--session <key>", "Recreate container for specific session")
        .option("--agent <id>", "Recreate containers for specific agent")
        .option("--browser", "Only recreate browser containers", false)
        .option("--force", "Skip confirmation prompt", false)
        .addHelpText("after", () => `
${theme.heading("Examples:")}
${formatHelpExamples(SANDBOX_EXAMPLES.recreate)}

${theme.heading("Why use this?")}\n${theme.muted("After updating Docker images or sandbox configuration, existing containers continue running with old settings.")}\n${theme.muted("This command removes them so they'll be recreated automatically with current config when next needed.")}\n\n${theme.heading("Filter options:")}\n${theme.muted("  --all          Remove all sandbox containers")}\n${theme.muted("  --session      Remove container for specific session key")}\n${theme.muted("  --agent        Remove containers for agent (includes agent:id:* variants)")}\n\n${theme.heading("Modifiers:")}\n${theme.muted("  --browser      Only affect browser containers (not regular sandbox)")}\n${theme.muted("  --force        Skip confirmation prompt")}`)
        .action(createRunner((opts) => sandboxRecreateCommand({
        all: Boolean(opts.all),
        session: opts.session,
        agent: opts.agent,
        browser: Boolean(opts.browser),
        force: Boolean(opts.force),
    }, defaultRuntime)));
    // --- Explain Command ---
    sandbox
        .command("explain")
        .description("Explain effective sandbox/tool policy for a session/agent")
        .option("--session <key>", "Session key to inspect (defaults to agent main)")
        .option("--agent <id>", "Agent id to inspect (defaults to derived agent)")
        .option("--json", "Output result as JSON", false)
        .addHelpText("after", () => `\n${theme.heading("Examples:")}\n${formatHelpExamples(SANDBOX_EXAMPLES.explain)}\n`)
        .action(createRunner((opts) => sandboxExplainCommand({
        session: opts.session,
        agent: opts.agent,
        json: Boolean(opts.json),
    }, defaultRuntime)));
}
