import logging
from django.shortcuts import redirect
from django.urls import reverse


logger = logging.getLogger(__name__)


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

    def __call__(self, request):
        response = self.get_response(request)
        login_url = reverse('login')
        
        # Não redireciona se já estiver na página de login ou se for um POST para login
        if response.status_code == 403 and request.path != login_url and not request.path.endswith('/login/'):
            # Log para verificar de onde vem o erro 403
            logger.warning(f'Erro 403: Acesso negado para {request.path} por {request.user}')
            
            # Se o usuário já estiver logado, exibe a página de acesso negado
            if request.user.is_authenticated:
                from django.shortcuts import render
                return render(request, 'errors/403.html', status=403)
                
            # Redirecionamento para a página de login se for anônimo
            return redirect(login_url)
        return response
    