from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from django.http import HttpResponseRedirect
from django.urls import reverse

from core.custom_annotations import in_groups


__all__ = ('user_login', 'user_logout')

def is_disabled(user):
    if in_groups(user, ('Students',)):
        if not user.student.has_logged_in:
            user.student.disable()
            return False
        else:
            return True
    return False

def user_login(request):

    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']

        user = authenticate(username=username, password=password)

        if user is not None:
            if user.is_active and not is_disabled(user):
                login(request, user)
                return HttpResponseRedirect(reverse('start'))
            else:
                messages.warning(request, "Your Grady account is disabled.")
                return HttpResponseRedirect(reverse('index'))

        else:
            # Bad login details were provided. So we can't log the user in.
            print("Invalid login details: {0}, {1}".format(username, password))
            messages.error(request, "Invalid login details supplied.")
            return HttpResponseRedirect(reverse('index'))
    else:
        return HttpResponseRedirect(reverse('index'))


@login_required(login_url='/')
def user_logout(request):
    logout(request)
    return HttpResponseRedirect(reverse('index'))