#!/usr/bin/env python3
"""
trionyx
~~~~~~~

Trionyx commandline tool

:copyright: 2017 by Maikel Martens
:license: GPLv3
"""
import os
import sys
import argparse

try:
    from trionyx.quickstart import Quickstart
except ImportError:
    # try to import based on file
    sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))
    try:
        from trionyx.quickstart import Quickstart
    except ImportError:
        print('Could not import trionyx')
        sys.exit(1)


class TrionyxCommand:
    """Trionyx commandline tool"""

    def __init__(self):
        """Init command parser"""
        parser = argparse.ArgumentParser(
            description='Trionyx',
            usage='''trionyx <command> [<args>]

Available commands are:
   create_project   Creates a new Trionyx project
   create_ansible   Creates a new ansible project to build and deploy Trionyx server
        ''')
        parser.add_argument('command', help='Subcommand to run')

        args = parser.parse_args(sys.argv[1:2])

        if not hasattr(self, args.command):
            print('Unrecognized command')
            parser.print_help()
            exit(1)
            # use dispatch pattern to invoke method with same name
        getattr(self, args.command)(sys.argv[2:])

    def create_project(self, argv):
        """Create new Trionyx project"""
        parser = argparse.ArgumentParser(description='Create a Trionyx project')
        parser.add_argument('name', help='Name of project (folder name)')

        args = parser.parse_args(argv)

        try:
            quickstart = Quickstart()
            quickstart.create_project(os.path.join(os.getcwd(), args.name))
            print(
                '\n\033[32mProject created in \033[33m{name}\033[32m,'.format(name=args.name),
                'cd into project folder and run\033[33m make first_setup\n'
            )
        except FileExistsError:
            print("Could not create project because a folder ({}) already exists".format(args.name))
            sys.exit(1)
        except Exception:
            print("Could not create project")
            sys.exit(1)

    def create_ansible(self, argv):
        """Create ansible playbook"""
        parser = argparse.ArgumentParser(description='Create a Trionyx Ansible build/deploy playbook')
        parser.add_argument('domain', help='Domain name of project')
        parser.add_argument('repo', help='Repository of project')

        args = parser.parse_args(argv)

        quickstart = Quickstart()
        quickstart.create_ansible(
            project_path=os.path.join(os.getcwd(), args.domain),
            domain=args.domain,
            repo=args.repo,
        )

        print(
            f'\n\033[32mAnsible playbook created in \033[33m{args.domain}\033[32m,',
            f'cd into folder and run\033[33m ansible-galaxy install -r requirements.yml\033[32m\n',
            '\nAnd follow the instructions in the created README.rst file\n',
        )


if __name__ == '__main__':
    TrionyxCommand()
