#!/usr/bin/env python
from cli.framework.authenticate import Authenticate
from cli.commands.vagrant import Vagrant
from cli.commands.docker_manager import Docker
import argparse
import sys


class ConnectParser(argparse.ArgumentParser):
    def error(self, message):
        sys.stderr.write('error: %s\n' % message)
        self.print_help()
        sys.exit(2)


def execute(params, user_data):
    prop = params.property if params.property else None
    directory = params.dir if params.dir else None
    try:
        if params.method == 'vagrant':
            call = Vagrant(prop, user_data, directory)
        elif params.method == 'docker':
            call = Docker(prop, user_data, directory)
        method = getattr(call, params.action)
        method()
    except AttributeError:
        print("Command not found")

if __name__ == '__main__':
    auth = Authenticate()

    is_logged_in = auth.authenticate()

    if is_logged_in:
        parser = ConnectParser()
        parser.add_argument('method', metavar='method', type=str, help='method to use (vagrant, docker)')
        parser.add_argument('action', metavar='action', type=str, help='action to perform (start, stop, destroy, reset)')
        parser.add_argument('--property', '-p', metavar='property', type=str, help='4-letter property key')
        parser.add_argument('--dir', '-d', metavar='directory', type=str,
                            help='Directory name. Property name will be used if not specified.')
        args = parser.parse_args()
        execute(args, auth.user_data)
    else:
        sys.exit()
