from django.shortcuts import redirect
from django.urls import reverse, NoReverseMatch

class MenuPermissionMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if request.user.is_authenticated and hasattr(request.user, 'usuariofuncionario'):
            # Verifica se o usuário é admin e concede acesso total
            if request.user.usuariofuncionario.is_admin:
                return self.get_response(request)

            # Mapeamento de URLs para permissões de menu
            url_permission_map = {
                reverse('apps.calendarapp:calendar'): 'calendario',
                reverse('lista_especies'): 'especies',
                reverse('lista_estoque'): 'sementes',
                reverse('lista_repique'): 'repique',
                reverse('lista_estufa'): 'estufa',
                reverse('lista_saidas'): 'aclimatacao',
                reverse('lista_de_protocolos'): 'protocolos',
                reverse('lista_clientes'): 'clientes',
                reverse('lista_fornecedores'): 'fornecedores',
                reverse('lista_itens_estoque'): 'estoque',
                reverse('relatorio_lote'): 'relatorios',
                reverse('funcionario_list'): 'funcionarios',
            }

            try:
                user_dashboard_url = reverse('dashboard_one', kwargs={'user_id': request.user.id})
                url_permission_map[user_dashboard_url] = 'dashboard'
            except NoReverseMatch:
                pass

            current_url = request.path
            permission_required = url_permission_map.get(current_url)
            user_permissions = request.user.usuariofuncionario.menu_permissions

            # Redireciona se o usuário não tiver permissão para a URL atual
            if permission_required and permission_required not in user_permissions:
                return redirect('no_permission')

        response = self.get_response(request)
        return response
