#!python

import argparse
from xbow._version import __version__
from xbow import commands

parser = argparse.ArgumentParser(description='Xbow: Add compute to your problems not problems to your compute.')
parser.add_argument('-V', '--version', action='version', version=__version__)
subparsers = parser.add_subparsers(dest='subparser_name')

lab_parser = subparsers.add_parser('lab', description='create your lab in the cloud', help='Create a lab in the cloud')
lab_parser.add_argument('-c', '--compute', help='Compute resource of head node')
lab_parser.add_argument('-s', '--shutdown', help='Shutdown your lab')

project_parser = subparsers.add_parser('create-project', description='create your project', help='Create a project ready experiments')
project_parser.add_argument('-f', '--files', help='Copy your files to your project')
project_parser.add_argument('-p', '--project-name', help='Name your project')

flow_parser = subparsers.add_parser('flow', description='Run a job in your Xbow Lab', help='xbow flow executable -a arg1 -b arg2 -c arg3')
#flow_parser.add_argument('instance_name', help='Name for this instance')
flow_parser.add_argument('job_schd', help='Submission Script')
flow_parser.add_argument('-c', '--compute', help='Compute resource of worker to use eg. p2.xlarge')
flow_parser.add_argument('-m', '--max-cost', help='Max cost of simulation eg. 5.00 for $5')
flow_parser.add_argument('-n', '--nodes', help='Number of worker nodes')
flow_parser.add_argument('-j', '--jobid', help='Name your job')

login_parser = subparsers.add_parser('login', description='Log in to your lab', help='login to your lab')
#login_parser.add_argument('uid')

portal_parser = subparsers.add_parser('portal', description='Launch Xbow:Portal', help='connects you to xbow:portal')
portal_parser.add_argument('uid')

note_parser = subparsers.add_parser('note', description='Launch a Xbow Notebook', help='configures a notebook running from your xbow:lab')

list_parser = subparsers.add_parser('list', description='List available instances', help='list current instances')

terminate_parser = subparsers.add_parser('terminate', description='Terminate an instance', help='terminate an instance')
terminate_parser.add_argument('uid')

transfer_parser = subparsers.add_parser('transfer', description='Transfer files to/from your Xbow:Lab', help='transfer files to/from your Xbow:Lab')
transfer_parser.add_argument('source', help='File or directory to transfer')
transfer_parser.add_argument('target', help='Destination file or directory')

args = parser.parse_args()

if args.subparser_name == 'lab':
    commands.create_lab()

if args.subparser_name == 'create':
    commands.create_instance(args.region, args.instance_type, tag=args.instance_name)

if args.subparser_name == 'flow':
    commands.create_experiment(job_schd=args.job_schd)
    #commands.create_experiment(args.compute, args.nodes, tag=args.instance_name, tag=args.job_schd)

if args.subparser_name == 'login':
    commands.xbow_login_lab()

if args.subparser_name == 'list':
    commands.list_instances()

if args.subparser_name == 'terminate':
    commands.terminate_instance(args.uid)

if args.subparser_name == 'transfer':
    commands.transfer(args.source, args.target)
