from django.shortcuts import render, redirect
from django.views import View
from django.contrib import messages,auth
from usermanagement.models import UserProfile
from codesofy.custom_config import get_global_master_details,get_local_date_time
from django.views.decorators.cache import cache_control
from django.utils.decorators import method_decorator
import logging
from datetime import datetime


logger = logging.getLogger("user-login-logoff-log")

def get_local_master_details():
    context = get_global_master_details()
    return context
# Create your views here.

@method_decorator(cache_control(no_cache=True, must_revalidate=True,no_store=True), name='dispatch')
class LoginView(View):
    def get(self, request):

        context = get_local_master_details()

        username = request.GET.get('username')


        if username:
            messages.error(request, "Multiple Attempts Detected. " + str(username) + " is locked. Contact the System Administrator")
            return render(request, 'login.html',context)

        if not request.user.is_authenticated:
            return render(request, 'login.html',context)
        else:
            user = request.user
            if UserProfile.objects.filter(user=user).exists():
                # return redirect('user-dashboard')
                return redirect('welcome')           
            else:
                messages.error(request,"User Profile does not exist")
                return render(request, 'login.html',context)
    
    def post(self,request):
        today = get_local_date_time()
        username = request.POST['username']
        password = request.POST['password']

        if username and password:

            user = auth.authenticate(request=request,username=username,password=password)

            if user:
                if UserProfile.objects.filter(user=user).exists():
                    if user.is_active:
                        auth.login(request,user)
                        logger.info(str(today) + " : INFO : LOGIN : "+username+" : Successfully loged in")
                        next = request.POST.get('next')

                        if next:
                            return redirect(next)
                        else:
                            # return redirect('user-dashboard')
                            return redirect('welcome')
                    else:
                        logger.error(str(today) + " : INFO : ERROR : "+username+" : Login failed. Inactive user")
                        messages.error(request,"Account is inactive")
                        return render(request, 'login.html')
                else:
                    logger.error(str(today) + " : INFO : ERROR : "+username+" : Login failed. User Profile doesn't exist")
                    messages.error(request,"User Profile does not exist")
                    return render(request, 'login.html')
            else:
                logger.error(str(today) + " : ERROR : LOGIN : "+username+" : Login failed. Incorrect credentials")
                messages.error(request,"Username or Password Incorrect")
                return render(request, 'login.html')
        else:
            messages.error(request,"Please type the Username and Password")
            return render(request, 'login.html')


@method_decorator(cache_control(no_cache=True, must_revalidate=True,no_store=True), name='dispatch')
class LogoutView(View):
    def post(self, request):
        today = get_local_date_time()
        user=request.user
        # Following should be redirected to login page after logoff operation
        auth.logout(request)
        logger.info(str(today) + " : INFO : LOGOUT : "+user.username+" : Successfully loged out")
        messages.success(request,"You have been logged out")
        return redirect('login')