"""
Decorators for role-based access control.
"""
from functools import wraps
from django.shortcuts import redirect
from django.contrib import messages


def role_required(*roles):
    """Decorator that restricts view access based on user roles."""
    def decorator(view_func):
        @wraps(view_func)
        def _wrapped_view(request, *args, **kwargs):
            if not request.user.is_authenticated:
                return redirect('accounts:login')
            if request.user.role not in roles:
                messages.error(request, "You do not have permission to access this page.")
                return redirect('dashboard:redirect')
            return view_func(request, *args, **kwargs)
        return _wrapped_view
    return decorator


def admin_required(view_func):
    """Decorator that restricts view to admin users only."""
    return role_required('admin')(view_func)


def teacher_required(view_func):
    """Decorator that restricts view to teacher users only."""
    return role_required('teacher')(view_func)


def student_required(view_func):
    """Decorator that restricts view to student users only."""
    return role_required('student')(view_func)
