#!/usr/bin/env python3
import os
import sys
from argparse import ArgumentParser
from archub import commands

def generate_commands():
    return commands.__all__


def short_match_command(prefix, available):
    matches = [x for x in filter(lambda x: x.startswith(prefix), available)]
    if len(matches) > 1:
        raise RuntimeError('Ambiguous short-command "{}" matches {}.'.format(prefix, ', '.join(matches)))
    if len(matches) < 1:
        raise RuntimeError('Short-command "{}" had no matches; available commands: {}.'.format(prefix, ', '.join(available)))
    return matches[0]


def main():
    if len(sys.argv) == 1 or (sys.argv[1] in ['-h', '--help'] and len(sys.argv) < 3):
        parser = ArgumentParser()
        parser.add_argument('command',
            choices=generate_commands()
        )
        parser.parse_args(['-h'])
        return 0
    parser = ArgumentParser(add_help=False)
    parser.add_argument('command')
    args,leftover = parser.parse_known_args()
    sys.argv = [sys.argv[0]]
    sys.argv.extend(leftover)
    try:
        command = short_match_command(args.command, generate_commands())
    except Exception as e:
        print(str(e))
        return 1
    return getattr(commands, command)(leftover)


if '__main__' == __name__:
    sys.exit(main())
