module tagion.tools.devutils;

import std.stdio;
import std.typetuple;
import std.traits;
import std.array;
import std.range;
import std.algorithm : remove;

import tagion.tools.Basic;

mixin Main!(_main);

int _main(string[] args) {
    enum tailName(string name) = name.split(".").tail(1)[0];
    enum toolName(alias tool) = tailName!(moduleName!tool);

    import dartstat = tagion.devutils.dartstat;

    alias allutils = AliasSeq!(
            dartstat,
    );

    if (args.length < 2) {
        stderr.writeln("Need a tool name:");
        stderr.writefln("%-(\t%s\n%)", [staticArray!(toolName!allutils)]);
        return 1;
    }
    const util = args[1];
    auto utilargs = args.remove(0);

    switch (util) {
        static foreach (utilname; allutils) {
    case toolName!utilname:
            return utilname._main(utilargs);
        }
    default:
        stderr.writefln("Unknown tool %s", util);
        return 1;
    }
}