# -*- coding: utf-8 -*-

import logging
import sys

from slapos.cli.command import Command
from slapos.register.register import do_register, RegisterConfig


class RegisterCommand(Command):
    """
    register a node in the SlapOS cloud
    """

    log = logging.getLogger('register')

    def get_parser(self, prog_name):
        ap = super(RegisterCommand, self).get_parser(prog_name)

        ap.add_argument('node_name',
                        help='Name of the node')

        ap.add_argument('--interface-name',
                        help='Interface name to access internet',
                        default='eth0')

        ap.add_argument('--master-url',
                        help='URL of SlapOS master',
                        default='https://slap.vifib.com')

        ap.add_argument('--master-url-web',
                        help='URL of SlapOS Master webservice to register certificates',
                        default='https://www.slapos.org')

        ap.add_argument('--partition-number',
                        help='Number of partition on computer',
                        default='10',
                        type=int)

        ap.add_argument('--ipv4-local-network',
                        help='Base of ipv4 local network',
                        default='10.0.0.0/16')

        ap.add_argument('--ipv6-interface',
                        help='Interface name to get ipv6',
                        default='')

        ap.add_argument('--login',
                        help='User login on SlapOS Master webservice')

        ap.add_argument('--password',
                        help='User password on SlapOs Master webservice')

        ap.add_argument('-t', '--create-tap',
                        help='Will trigger creation of one virtual "tap" interface per '
                             'Partition and attach it to primary interface. Requires '
                             'primary interface to be a bridge. defaults to false. '
                             'Needed to host virtual machines.',
                        default=False,
                        action='store_true')

        ap.add_argument('-n', '--dry-run',
                        help='Simulate the execution steps',
                        default=False,
                        action='store_true')

        return ap

    def take_action(self, args):
        try:
            conf = RegisterConfig(logger=self.log)
            conf.setConfig(args)
            return_code = do_register(conf)
        except SystemExit as err:
            return_code = err

        sys.exit(return_code)
