from rest_framework import generics
from .models import Knowledge
from .serializers import KnowledgeDetailSerializer, KnowledgeListSerializer
from config.authentication import (
    JWTAuthenticationWithUserCheck,
    IsAuthenticatedAndOwner
)

class KnowledgeListView(generics.ListCreateAPIView):
    authentication_classes = [JWTAuthenticationWithUserCheck]
    permission_classes = [IsAuthenticatedAndOwner]
    
    serializer_class = KnowledgeListSerializer

    def get_queryset(self):
        return Knowledge.objects.filter(user=self.request.user.publicIdentifier)

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

class KnowledgeDetailView(generics.RetrieveUpdateDestroyAPIView):
    authentication_classes = [JWTAuthenticationWithUserCheck]
    permission_classes = [IsAuthenticatedAndOwner]
    
    serializer_class = KnowledgeDetailSerializer
    lookup_field = 'publicIdentifier'  # Utiliser 'publicIdentifier' comme champ de recherche
    lookup_url_kwarg = 'pid'  # Correspondre à 'pid' dans l'URL

    def get_queryset(self):
        return Knowledge.objects.filter(user=self.request.user.publicIdentifier)
