from django.shortcuts import render, redirect
from django.views import View
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin

from .models import (
    Works,
    Work_Sub_Categories
)


class WorksView(LoginRequiredMixin, View):
    # SHOW ALL WORKS
    def get(self, request):

        if request.user.is_authenticated:

            works = Works.objects.all().order_by('-id')
            return render(request, 'works.html', {'works': works})

        else:
            messages.error(request, "You have to login first.")
            return redirect('adminLogin')




class WorkSubCategoriesView(LoginRequiredMixin, View):
    # SHOW WORK SUB CATEGORIES
    def get(self, request, id):

        if request.user.is_authenticated:
            try:
                work = Works.objects.get(id=id)
                work_sub_categories = Work_Sub_Categories.objects.filter(work=work).select_related('sub_category', 'contractor')
                return render(request, 'work-sub-categories.html', {'work': work, 'work_sub_categories': work_sub_categories})
            except Works.DoesNotExist:
                messages.error(request, "Work doesn't exist.")
                return redirect('adminWorks')
        else:
            messages.error(request, "You have to login first.")
            return redirect('adminLogin')





class WorkSubCategoryDetailsView(LoginRequiredMixin, View):
    # SHOW WORK SUB CATEGORY DETAILS
    def get(self, request, id):

        if request.user.is_authenticated:
            try:
                work_sub_category = Work_Sub_Categories.objects.select_related('work', 'sub_category', 'contractor').prefetch_related('work_progress_images', 'work_progress_videos').get(id=id)
                return render(request, 'work-details.html', {'work_sub_category': work_sub_category})
            except Work_Sub_Categories.DoesNotExist:
                messages.error(request, "Work sub category doesn't exist.")
                return redirect('adminWorks')
        else:
            messages.error(request, "You have to login first.")
            return redirect('adminLogin')