#!python

import sys

from etherpump import __VERSION__


def subcommands():
    """List all sub-commands for the `--help` output."""
    output = []

    subcommands = [
        'creatediffhtml',
        'deletepad',
        'dumpcsv',
        'gethtml',
        'gettext',
        'index',
        'init',
        'list',
        'listauthors',
        'publication',
        'pull',
        'revisionscount',
        'sethtml',
        'settext',
        'showmeta',
    ]

    for subcommand in subcommands:
        try:
            # http://stackoverflow.com/questions/301134/dynamic-module-import-in-python
            doc = __import__(
                "etherpump.commands.%s" % subcommand,
                fromlist=["etherdump.commands"],
            ).__doc__
        except ModuleNotFoundError:
            doc = ""
        output.append(f'    {subcommand}: {doc}')

    output.sort()

    return '\n'.join(output)


usage = """
         _
        | |
  _ _|_ | |     _   ,_     _          _  _  _     _
 |/  |  |/ \   |/  /  |  |/ \_|   |  / |/ |/ |  |/ \_
 |__/|_/|   |_/|__/   |_/|__/  \_/|_/  |  |  |_/|__/
                        /|                     /|
                        \|                     \|
Usage:

    etherpump CMD

where CMD could be:

{}

For more information on each command try:

    etherpump CMD --help

""".format(
    subcommands()
)

try:
    cmd = sys.argv[1]
    if cmd.startswith("-"):
        args = sys.argv
    else:
        args = sys.argv[2:]

    if len(sys.argv) < 3:
        if any(arg in args for arg in ['--help', '-h']):
            print(usage)
            sys.exit(0)
        elif any(arg in args for arg in ['--version', '-v']):
            print('etherpump {}'.format(__VERSION__))
            sys.exit(0)

except IndexError:
    print(usage)
    sys.exit(0)

try:
    # http://stackoverflow.com/questions/301134/dynamic-module-import-in-python
    cmdmod = __import__(
        "etherpump.commands.%s" % cmd, fromlist=["etherdump.commands"]
    )
    cmdmod.main(args)
except ImportError as e:
    print("Error performing command '{0}'\n(python said: {1})\n".format(cmd, e))
    print(usage)
