from rest_framework.permissions import IsAuthenticated
from mfire.models import *
from api.serializers import *
from rest_framework.generics import ListAPIView
from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from rest_framework import viewsets #imp
from rest_framework.response import Response
from rest_framework import status
from django.contrib.auth import authenticate
from api.renderers import UserRenderer
from rest_framework_simplejwt.tokens import RefreshToken
from django.http import HttpResponse
from rest_framework.parsers import MultiPartParser, FormParser, JSONParser #file imag upload
from django.contrib.auth import authenticate,logout,login
from rest_framework.decorators import action

            
#all crude operation work on this api view
class vendorsViewSet(viewsets.ModelViewSet):
    queryset = SiteModelProduct.objects.all()
    serializer_class = ClientSerializer

    def perform_create(self, serializer):
        instance_a = serializer.save()
        #access the value of vendor model
        vendorid = instance_a.id
        vendors = Vendor.objects.get(pk=vendorid)
        on_time_delivery_rate = instance_a.on_time_delivery_rate
        quality_rating_avg = instance_a.quality_rating_avg
        average_response_time = instance_a.average_response_time
        fulfillment_rate = instance_a.fulfillment_rate
        perfomancehis = HistoricalPerformance(vendor=vendors,on_time_delivery_rate=on_time_delivery_rate,quality_rating_avg=quality_rating_avg,average_response_time=average_response_time,fulfillment_rate=fulfillment_rate)
        perfomancehis.save()


    #url - /api/v1/vendors/{vendor_id}/performance/
    @action(detail=True, methods=['get'])
    def performance(self, request, pk=None):
        try:
            vendors = Vendor.objects.get(pk=pk)
            perfomance = HistoricalPerformance.objects.filter(vendor=vendors)
            per_serializer = HistoricalPerformanceSerializer(perfomance, many=True, context={'request':request})
            return Response(per_serializer.data)
        except Exception as e:
            return Response({'message':'Vendor id not exist.'})
