#!/usr/bin/env python3

import sys

tasks = {
    'getref': 'Download reference data',
    'prepareref': 'Prepare reference data for running the pipeline',
    'reportfilter': 'Filter report.tsv file',
    'run': 'Run the ARIBA local assembly pipeline',
    'summary': 'Summarise multiple reports made by "run"',
    'flag': 'Translate the meaning of a flag output by the pipeline',
    'aln2meta': 'Make metadata input to preparef, using multialignment and SNPs',
    'test': 'Run on small test dataset',
    'version': 'Print version and exit',
}


ordered_tasks = [
    'getref',
    'prepareref',
    'run',
    'reportfilter',
    'summary',
    'flag',
    'aln2meta',
    'test',
    'version',
]


def print_usage_and_exit():
    print('Usage: ariba <command> [options] <required arguments>', file=sys.stderr)
    print('\nTo get minimal usage for a command use:\nariba command', file=sys.stderr)
    print('\nTo get full help for a command use one of:\nariba command -h\nariba command --help\n', file=sys.stderr)
    print('\nAvailable commands:\n', file=sys.stderr)
    max_task_length = max([len(x) for x in list(tasks.keys())]) + 1
    for task in ordered_tasks:
        print('{{0: <{}}}'.format(max_task_length).format(task), tasks[task], sep=' ', file=sys.stderr)
    sys.exit(1)

if len(sys.argv) == 1 or sys.argv[1] in ['-h', '-help', '--help']:
    print_usage_and_exit()

task = sys.argv.pop(1)

if task not in tasks:
    print('Task "' + task + '" not recognised. Cannot continue.\n', file=sys.stderr)
    print_usage_and_exit()

exec('import ariba.tasks.' + task)
exec('ariba.tasks.' + task + '.run()')
