#!/usr/bin/env python
# -*- coding: utf-8 -*-

# for ide
if False:
    from gluon import *


@auth.requires_login()
@auth.requires_membership(myconf.take('datos.grupoldap'))
def panel():
    log('acceso')
    # menu favoritos
    form = CENTER(
        H4('Soporte Escritorio Virtual Guacamole'),
        FORM(
            DIV(I(_class='fas fa-user fa-2x', _id='tit_minigrid'),
                TAG('Usuarios'),
                DIV(grand_button('agregar usuario',
                                 URL('useradm', 'guac', 'nuevo_usuario'),
                                 'fas fa-list-alt'),
                    grand_button('administrar usuario',
                                 URL('useradm', 'guac', 'selec_usuario'),
                                 'fas fa-unlock'),
                    _id='mini_grid'),
                _id='indexdiv'),
            _id='panel_grid',
            _style='width:100%;overflow-x:auto;-ms-overflow-x:scroll'))
    return dict(form=form)


@auth.requires_login()
@auth.requires_membership(myconf.take('datos.grupoldap'))
def nuevo_usuario():
    todos = usuarios_en_rama('mr')[1]
    form = FORM(CENTER(
        H4('Seleccione Usuario'),
        select_search(todos, 'Elija usuario..'),
        BR(),
        BR(),
        INPUT(_type="submit", _class="btn btn-primary btn-medium",
              _value='Continuar')
    ))
    if form.accepts(request, session):
        session.usuario = request.vars['seleccion']
        log('usuario: ' + str(session.usuario))
        resultado = {
            'guac': guac_crear_usuario(session.usuario),
            'rama ldap': agrego_rama(session.usuario, 'guacamole'),
            'permisos_guac': guac_userPermissions(
                session.usuario, 'add', 'UPDATE')}
        session.resultado = dict_to_table(resultado)
        session.volver = URL('useradm', 'guac', 'panel')
        redirect(URL('useradm', 'guac', 'resultado'))
    else:
        log('acceso')
    return dict(form=form)


@auth.requires_login()
@auth.requires_membership(myconf.take('datos.grupoldap'))
def resultado():
    form = CENTER(
        DIV(session.resultado, _class='well well-lg'),
        A('Volver',
          _href=session.volver,
          _class='btn btn-default'))
    return dict(form=form)




@auth.requires_login()
@auth.requires_membership(myconf.take('datos.grupoldap'))
def selec_usuario():
    todos = usuarios_en_rama('guacamole')[1]
    form = FORM(CENTER(
        H4('Seleccione Usuario'),
        select_search(todos, 'Elija usuario..'),
        BR(),
        BR(),
        INPUT(_type="submit", _class="btn btn-primary btn-medium",
              _value='Continuar')
    ))
    if form.accepts(request, session):
        usuario = request.vars['seleccion']
        log('adm usuario: ' + str(usuario))
        redirect(URL('useradm', 'guac', 'adm_usuario',
                     vars={'usuario': usuario}))
    else:
        log('acceso')
    return dict(form=form)


@auth.requires_login()
@auth.requires_membership(myconf.take('datos.grupoldap'))
def adm_usuario():
    if 'usuario' in request.vars:
        usuario = request.vars['usuario']
    else:
        redirect(URL('useradm', 'guac', 'panel'))
    boton_restore = A('cambiar a false',
                      _href=URL('useradm', 'guac', 'restore_totp',
                                vars={'usuario': usuario}),
                      _class='btn btn-default')
    guac = guac_consulta_usuario(usuario)[1]
    try:
        guac_timestamp = int(guac[u'lastActive'])
        ult_act = datetime.datetime.fromtimestamp(guac_timestamp)
    except Exception:
        ult_act = '-'
    try:
        totp = TABLE(TR(TD(guac[u'attributes']['guac-totp-key-confirmed']),
                        TD(boton_restore)))
    except Exception:
        totp = 'sin ingreso a ev'
    try:
        permisos = guac[u'permisos'][u'userPermissions']
    except Exception:
        permisos = '-'
    table_dict = {
        'totp': totp,
        'ultima actividad': ult_act,
        'permisos': permisos
    }
    guac_grp_todos = guac_lista_grupos()[1]
    guac_grp_selected = guac[u'grupos']

    form = FORM(CENTER(TABLE(TD(CENTER(
        TAG("""<label class="control-label">
            Configuración de Usuario Escritorio virtual</label>"""),
        INPUT(_name='fusuario', _type='text', _value=str(guac[u'username']),
              _id="ancho120", _autocomplete="off",
              _class='form-control string', _disabled="disabled"),
        BR(),
        DIV(dict_to_table(table_dict))),
        BR(),
        CENTER(box_multiple_selec(guac_grp_todos, preselec=guac_grp_selected)),
        CENTER(
            A('Volver', _href=URL('useradm', 'guac', 'panel'),
              _class='btn btn-default'),
            INPUT(_type="submit", _class="btn btn-primary btn-medium",
                  _value='Cambiar Grupos'))
        ))))
    if form.accepts(request, session):
        # recabo info de formulario
        resultado = []
        grupos = request.vars['my-select']
        log(grupos)
        if grupos is None:
            # borro todos los grupos si tiene
            for i in guac_grp_selected:
                resultado.append(guac_remove_group(usuario, i)[1])
                session.resultado = resultado
                session.volver = URL('useradm', 'guac', 'panel')
                redirect(URL('useradm', 'guac', 'resultado'))
        elif isinstance(grupos, str):
            # cuando hay un solo elemento, lo paso a lista de 1 elemento.
            grupos = [grupos]
        elif set(grupos) == set(guac_grp_selected):
            # no se selecciono ningun grupo nuevo
            redirect(URL('useradm', 'guac', 'panel'))
        # si llego hasta aca hay modificacion de grupos, itero
        # si hay nuevos grupos, agrego
        for i in grupos:
            if i not in guac_grp_selected:
                resultado.append(guac_add_group(usuario, i)[1])
        # si se eliminaron grupos, lo elimino
        for j in guac_grp_selected:
            if j not in grupos:
                resultado.append(guac_remove_group(usuario, j)[1])
        if resultado == []:
            resultado = 'Sin cambios'    
        session.resultado = resultado
        session.volver = URL('useradm', 'guac', 'panel')
        redirect(URL('useradm', 'guac', 'resultado'))
    else:
        log('acceso ' + str(request.function))
    return dict(form=form)


@auth.requires_login()
@auth.requires_membership(myconf.take('datos.grupoldap'))
def restore_totp():
    if 'usuario' in request.vars:
        usuario = request.vars['usuario']
    else:
        redirect(URL('useradm', 'guac', 'panel'))
    resultado = guac_reconfirm_totp(usuario)
    session.resultado = resultado
    session.volver = URL('useradm', 'guac', 'panel')
    redirect(URL('useradm', 'guac', 'resultado'))
