from django.core.cache import cache
from rest_framework import generics, permissions
from rest_framework.response import Response

from users.views_admin import IsAdminRole

from .models import ResumeTemplate
from .serializers import ResumeTemplateAdminSerializer, ResumeTemplateSerializer

TEMPLATE_LIST_CACHE_KEY = "api:v1:resume_templates:active"


class TemplateListCreateView(generics.ListCreateAPIView):
    queryset = ResumeTemplate.objects.filter(is_active=True).order_by("name")

    def get_serializer_class(self):
        if self.request.method == "POST":
            return ResumeTemplateAdminSerializer
        return ResumeTemplateSerializer

    def get_permissions(self):
        if self.request.method == "POST":
            return [IsAdminRole()]
        return [permissions.IsAuthenticated()]

    def get_queryset(self):
        if self.request.method == "POST":
            return ResumeTemplate.objects.all().order_by("name")
        return ResumeTemplate.objects.filter(is_active=True).order_by("name")

    def list(self, request, *args, **kwargs):
        if request.method == "GET":
            cached = cache.get(TEMPLATE_LIST_CACHE_KEY)
            if cached is not None:
                return Response(cached)
        response = super().list(request, *args, **kwargs)
        if request.method == "GET" and response.status_code == 200:
            cache.set(TEMPLATE_LIST_CACHE_KEY, response.data, 300)
        return response

    def perform_create(self, serializer):
        super().perform_create(serializer)
        cache.delete(TEMPLATE_LIST_CACHE_KEY)
