import click

from mgrctl.apps.vm6.auth import __version__
from mgrctl.api.vm6 import AuthAPI
from mgrctl.utils.api_users import UserAPI


user_cursor = UserAPI(callback_class=AuthAPI)


@click.group(help='auth cmd for auth in VMmanager 6')
@click.version_option(
    version=__version__,
    package_name='mgrctl.apps.vm6.auth',
    message=__version__
)
def cli():
    pass


@cli.group(help='Manage users')
def user():
    pass


@user.command(help='List users')
@click.option(
    '--all',
    is_flag=True,
    required=False,
    help='Show all users'
)
@click.option(
    '--admins',
    is_flag=True,
    required=False,
    help='Show all active admins',
)
def ls(all, admins):
    if all:
        users = user_cursor.get_users(role='all')
    elif admins:
        users = user_cursor.get_users(role='admin')
    else:
        users = user_cursor.get_users(role='all')
    # print users:
    user_cursor.echo_users(users)


@user.command(
    help='Generate an access key and return auth link(s)',
    no_args_is_help=True
)
@click.option(
    '--id',
    '_id',
    required=False,
    type=int,
    help='User id'
)
@click.option(
    '--count',
    required=False,
    type=int,
    help='Number of access keys generated',
)
@click.option(
    '--random',
    is_flag=True,
    required=False,
    help='Generate access key for the first available admin'
)
@click.option(
    '--interactive',
    is_flag=True,
    required=False,
    help='Interactive mode, ignores other keys'
)
def access(_id, count, interactive, random):
    if _id and not count:
        keys = user_cursor.get_access_keys(user=_id, count=1)
    elif _id and count:
        keys = user_cursor.get_access_keys(user=_id, count=count)
    elif random:
        admin = user_cursor.get_first_random_admin()
        keys = user_cursor.get_access_keys(user=admin.get('id', 3))
    elif interactive:
        user_cursor.gen_access_links_interactive()
        return  # exit from func
    else:
        pass
    links = user_cursor.gen_access_links(keys)
    user_cursor.echo_access_links(links)


@user.command(help='Generate API token for mgrctl user')
def token():
    token = user_cursor.gen_api_token()
    user_cursor.echo_api_token(token)