from django.http import HttpResponseRedirect
from django.contrib import messages
from django.urls import reverse_lazy


class ValidatePermissionRequiredMixin(object):
    permission_required= ''
    url_redirect = None

    def get_perms(self):
        perms = []
        if isinstance(self.permission_required, str):
            perms.append(self.permission_required)
        else:
            perms = list(self.permission_required)
        return perms

    def get_url_redirect(self):
        if self.url_redirect is None:
            return reverse_lazy('inicio')
        return self.url_redirect

    def dispatch(self, request, *args, **kwargs):
        riquest = request.user.groups.all()
        lista = request.user.get_group_permissions()

        if riquest != "":
            for i in riquest:
                grupo = i
                print('super : ', grupo)
                if grupo is not None:
                    perms = self.get_perms()
                    print('perms : ', perms)
                    for p in perms:
                        if not p in lista:
                            messages.error(request, 'No tiene permiso para ingresar a este módulo')
                            return HttpResponseRedirect(self.get_url_redirect())
                    return super().dispatch(request, *args, **kwargs)
                messages.error(request, 'No tiene permiso para ingresar a este módulo')
                return HttpResponseRedirect(self.get_url_redirect())

        if request.user.is_superuser:
            return super().dispatch(request, *args, **kwargs)

        return HttpResponseRedirect(reverse_lazy('inicio'))  # inicio
