from rest_framework.views import APIView
from rest_framework.generics import ListAPIView
from rest_framework.response import Response
from django.utils import timezone

from .models import Company, Universal, Foydali, Malumotlar, Resource, GetData, RequestCounts
from .serializers import CompanySlz, MalumotlarSlz, UniversalSlz, FoydaliSlz, ResourceSlz, GetDataSlz


class CompanyListView(ListAPIView):
    queryset = Company.objects.all()
    serializer_class = CompanySlz

    def finalize_response(self, request, response, *args, **kwargs):

        try:
            obj = RequestCounts.objects.get(date=timezone.now().date())
        except RequestCounts.DoesNotExist:
            obj = RequestCounts.objects.create(date=timezone.now().date())
        obj.company += 1
        obj.save()

        res = {}
        res['success'] = True
        res['message'] = 'company success'
        res['data'] = response.data
        response.data = res
        return super().finalize_response(request, response, *args, **kwargs)



class MalumotListView(ListAPIView):
    queryset = Malumotlar.objects.all()
    serializer_class = MalumotlarSlz

    def finalize_response(self, request, response, *args, **kwargs):
        try:
            obj = RequestCounts.objects.get(date=timezone.now().date())
        except RequestCounts.DoesNotExist:
            obj = RequestCounts.objects.create(date=timezone.now().date())
        obj.malumotlar += 1
        obj.save()

        res = {}
        res['success'] = True
        res['message'] = 'malumot success'
        res['data'] = response.data
        response.data = res
        return super().finalize_response(request, response, *args, **kwargs)


class FoydaliListView(ListAPIView):
    queryset = Foydali.objects.all()
    serializer_class = FoydaliSlz

    def finalize_response(self, request, response, *args, **kwargs):
        try:
            obj = RequestCounts.objects.get(date=timezone.now().date())
        except RequestCounts.DoesNotExist:
            obj = RequestCounts.objects.create(date=timezone.now().date())
        obj.foydali += 1
        obj.save()

        res = {}
        res['success'] = True
        res['message'] = 'foydali success'
        res['data'] = response.data
        response.data = res
        return super().finalize_response(request, response, *args, **kwargs)


class UniversalListView(ListAPIView):
    queryset = Universal.objects.all()
    serializer_class = UniversalSlz

    def finalize_response(self, request, response, *args, **kwargs):
        try:
            obj = RequestCounts.objects.get(date=timezone.now().date())
        except RequestCounts.DoesNotExist:
            obj = RequestCounts.objects.create(date=timezone.now().date())
        obj.universal += 1
        obj.save()

        res = {}
        res['success'] = True
        res['message'] = 'universal success'
        res['data'] = response.data
        response.data = res
        return super().finalize_response(request, response, *args, **kwargs)


class ResourceListView(ListAPIView):
    queryset = Resource.objects.all()
    serializer_class = ResourceSlz


    def finalize_response(self, request, response, *args, **kwargs):
        try:
            obj = RequestCounts.objects.get(date=timezone.now().date())
        except RequestCounts.DoesNotExist:
            obj = RequestCounts.objects.create(date=timezone.now().date())
        obj.resource += 1
        obj.save()

        res = {}
        res['success'] = True
        res['message'] = 'resource success'
        res['data'] = response.data
        response.data = res
        return super().finalize_response(request, response, *args, **kwargs)


class GetDataListView(ListAPIView):
    queryset = GetData.objects.all()
    serializer_class = GetDataSlz


    def finalize_response(self, request, response, *args, **kwargs):
        try:
            obj = RequestCounts.objects.get(date=timezone.now().date())
        except RequestCounts.DoesNotExist:
            obj = RequestCounts.objects.create(date=timezone.now().date())
        obj.getdata += 1
        obj.save()

        res = {}
        res['success'] = True
        res['message'] = 'getdata success'
        res['data'] = response.data
        response.data = res
        return super().finalize_response(request, response, *args, **kwargs)


class GetDataDetilView(APIView):

    def get(self, request, pk, *args, **kwargs):
        try:
            obj = GetData.objects.get(pk=pk)
        except GetData.DoesNotExist:
            return Response(status=404, data={'detail': 'Not Found'})
        res = {}
        res['success'] = True
        res['message'] = 'getdata'
        res['data'] = {'id': obj.id, 'positsion': obj.position}
        return Response(data=res, status=200)
