"""passbook admin Middleware to impersonate users"""

from passbook.core.models import User


def impersonate(get_response):
    """Middleware to impersonate users"""

    def middleware(request):
        """Middleware to impersonate users"""

        # User is superuser and has __impersonate ID set
        if request.user.is_superuser and "__impersonate" in request.GET:
            request.session['impersonate_id'] = request.GET["__impersonate"]
        # user wants to stop impersonation
        elif "__unimpersonate" in request.GET and 'impersonate_id' in request.session:
            del request.session['impersonate_id']

        # Actually impersonate user
        if request.user.is_superuser and 'impersonate_id' in request.session:
            request.user = User.objects.get(pk=request.session['impersonate_id'])

        response = get_response(request)
        return response
    return middleware