from django.contrib.auth.mixins import AccessMixin
from django.shortcuts import redirect
from django.contrib import messages

class AdminRequiredMixin(AccessMixin):
    """
    Verrouille une vue (Dashboard) pour qu'elle ne soit accessible qu'aux administrateurs.
    """
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return self.handle_no_permission()
            
        if not request.user.is_admin():
            messages.error(request, "Accès refusé. Cette zone est réservée aux administrateurs.")
            # Redirection de sécurité vers l'accueil public
            return redirect('vitrine:home') 
            
        return super().dispatch(request, *args, **kwargs)


class ScannerAccessMixin(AccessMixin):
    """
    Verrouille une vue (Scanner) pour qu'elle ne soit accessible qu'aux agents et administrateurs.
    """
    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return self.handle_no_permission()
            
        if not request.user.can_scan():
            messages.error(request, "Accès refusé. Vous n'avez pas l'autorisation d'utiliser le scanner.")
            return redirect('vitrine:home')
            
        return super().dispatch(request, *args, **kwargs)