from django.http import JsonResponse
from django.shortcuts import get_object_or_404, render, redirect
from django.views import View

from works.models import Work_Sub_Categories, Works
from .forms import LoginForm
from .EmailBackEnd import EmailBackEnd
from django.contrib import messages
from django.contrib.auth import login, logout
from .models import ContractorProfile, Users
from django.contrib.auth.mixins import LoginRequiredMixin
# Create your views here.

class AuthenticationViews(View):

    def get(self, request):
        return render(request, "login.html", {'form' : LoginForm})


    def post(self, request):
        form = LoginForm(request.POST)
        if form.is_valid():
            user = EmailBackEnd.authenticate(request, username = form.cleaned_data['email'], password=form.cleaned_data['password'])
            print(user)
            if user is not None:
                if user.user_type == 1:
                    login(request, user)
                    return redirect('adminDashboard')
                else: 
                    return render(request, 'login.html', {'form' : form, 'error' : "Invalid email id or password"})
            else:
                return render(request, "login.html", {'form' : form, 'error' : "Invalid email id or password"})
        else:
            return render(request, "login.html", {'form' : form})



class LogoutView(View):

    def get(self, request):
        logout(request)
        return redirect('login')




class UsersView(LoginRequiredMixin, View):

    def get(self, request):
        users = Users.objects.filter(user_type = 2)
        return render(request, "users.html", {'users' : users})



class ContractorsView(LoginRequiredMixin, View):

    def get(self, request):

        contractors = Users.objects.filter(
            user_type=3,
            contractor_profile__isnull=False
        ).select_related(
            'contractor_profile'
        ).order_by('-id')

        return render(
            request,
            "contractors.html",
            {
                'contractors': contractors
            }
        )
    


class ContractorDetailsView(LoginRequiredMixin, View):

    def get(self, request, id):

        contractor = get_object_or_404(
            Users.objects.select_related(
                "contractor_profile"
            ).prefetch_related(
                "contractor_profile__sub_categories"
            ),
            id=id
        )

        assigned_works = Work_Sub_Categories.objects.select_related(
            "work",
            "sub_category"
        ).filter(
            contractor=contractor
        ).order_by("-id")

        context = {
            "contractor": contractor,
            "assigned_works": assigned_works,
            "total_assigned": assigned_works.count(),
            "assigned_count": assigned_works.filter(status=1).count(),
            "started_count": assigned_works.filter(status=2).count(),
            "completed_count": assigned_works.filter(status=3).count()
        }

        return render(
            request,
            "contractor.html",
            context
        )


class ToggleContractorVerificationView(LoginRequiredMixin, View):

    def post(self, request):

        contractor_id = request.POST.get('contractor_id')
        is_verified = request.POST.get('is_verified') == 'true'

        contractor = ContractorProfile.objects.get(
            user_id=contractor_id
        )

        contractor.is_verified = is_verified
        contractor.save()

        return JsonResponse({
            'status': True
        })