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:
        user_cursor.echo_users(role='all')
    elif admins:
        user_cursor.echo_users(role='admin')
    else:
        user_cursor.echo_users(role='all')


@user.command(help='Generate access key and return auth link(s)')
@click.option(
    '--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='Interactive mode, ignores other keys'
)
@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)
        links = user_cursor.gen_access_links(keys)
        user_cursor.echo_access_links(links)
    elif id and count:
        keys = user_cursor.get_access_keys(user=id, count=count)
        links = user_cursor.gen_access_links(keys)
        user_cursor.echo_access_links(links)
    elif interactive:
        pass
    elif random:
        admin = user_cursor.get_first_random_admin()
        keys = user_cursor.get_access_keys(user=admin.get('id', 3), count=1)
        links = user_cursor.gen_access_links(keys)
        user_cursor.echo_access_links(links)
    else:
        pass


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