module examples.deploy;
import cmdline;

import std.stdio;

void main(string[] argv) {
    program.name("deploy");
    program.setVersion("0.0.1");
    program.option("-c, --config <path>", "set config path", "./deploy.conf");

    program.command("calc", "simple calculator for baisc binary computation", [
        "file": "calc"
    ]);
    program.aliasName("cal");

    Command setup = program.command!string("setup [env]")
        .description("run setup commands for all envs");
    setup.argumentDesc("env", "the setup env");
    setup.option("-s, --setup-mode <mode>", "Which setup mode to use", "normal");
    setup.action((in opts, in _env) {
        string mode = opts("setup-mode").get!string;
        string env = _env.isValid ? cast(string) _env : "env";
        writefln("read config from %s", program.opts["config"].get!string);
        writefln("setup for %s env(s) with %s mode", env, mode);
    });

    Command exec = program.command!string("exec <script>");
    exec.aliasName("ex");
    exec.description("execute the given remote cmd");
    exec.argumentDesc("script", "the script to be executed");
    exec.option("-e, --exec-mode <mode>", "Which exec mode to use", "fast");
    exec.action((opts, _script) {
        string config = program.opts["config"].get!string;
        string script = cast(string) _script;
        string mode = opts("exec-mode").get!string;
        writefln("read config from %s", config);
        writefln("exec `%s` using %s mode and config %s", script, mode, config);
    });

    exec.addHelpText(
        AddHelpPos.After,
        `
Examples:
    $ deploy exec sequential
    $ deploy exec async`
    );

    program.parse(argv);
    // Option test_opt = createOption!int("-t, --test <test-num>");
    // test_opt.preset(12);
}