from functools import wraps
from flask_login import current_user
from . import application
from flask import redirect, url_for, abort

def has_permission(typePermission, classid):
    # 1. Autenticación y Grupo de Usuario
    if not current_user.is_authenticated or not current_user.usergroup:
        # Si el usuario no está autenticado o no tiene grupo, redirigir al índice (o abortar 401 si prefieres)
        return redirect(url_for('application.index'))
    
    try:
        # Obtener permisos (asumiendo que 'application' y 'current_user' están disponibles)
        clazzPermissions = application.getClazz(classid).getPermissions()
        userGroup = current_user.usergroup.id
        if userGroup == 1:
            return True
        elif clazzPermissions:
            permission = clazzPermissions[userGroup]
            #print(permission)
            # 2. Verificación de Permiso
            if not permission.get(typePermission, False):
                return False
            
            else:
                return True
    
    except KeyError:
        return False

def verify_permission(typePermission):
    def decorator(f):
        @wraps(f)
        def decorated_function(*args, **kwargs):
            classid = kwargs.get('classid')

            permission = has_permission(typePermission, classid)
            if permission is False:
                abort(401)  

            return f(*args, **kwargs)
        return decorated_function
    return decorator