module examples.varmerge;

import cmdline;
import std.stdio;
import std.conv;
import std.process;

void main(in string[] argv) {
    program
        .name("varmerge")
        .description("test the variadic merge feature")
        .setVersion("1.1.0")
        .setConfigOption
        .option!(int[])("-n, --nums <ns...>", "", [12, 13, 14]);

    Option iopt = createOption("-f, --flag");
    iopt.implies("strs", ["ninja", "scons"]);

    Option xopt = createOption!string("-s, --strs [ss...]");
    xopt.preset(["xmake"]);
    xopt.defaultVal("make", "cmake");

    environment["CONFIG_" ~ "VARMERGE"] = "meson;ms-build;waf";
    xopt.env("CONFIG_" ~ "VARMERGE");

    program
        .addOption(iopt)
        .addOption(xopt);

    program.argToOpt("-s");

    program.addHelpText(AddHelpPos.After, `
Try to run:
    $ varmerge --flag -n99 -n59 -s maly jacob -- arg to opt
    `);
    
    program.action((opts) {
        auto nresult = opts("nums").get!(int[]);
        auto sresult = opts("strs").get!(string[]);
        auto fresult = opts("flag");
        writefln("nums:\t%s", nresult.to!string);
        writefln("strs:\t%s", sresult.to!string);
        writefln("--flag:\t%s", fresult.isValid ? fresult.get!bool.to!string : "unset");
    });

    program.parse(argv);
}