from management.models.fascicolo import Fascicolo
from management.models.tipo_commessa import TipoCommessa
from management.repositories.commessa import CommessaRepository
from management.serializers.commessa_serializer import CommessaSerializer
from management.serializers.fascicolo_serializer import FascicoloSerializer

from .base import *


class CommessaAPIView(GenericViewSet):
    authentication_classes = [TokenAuthentication]
    _repository = CommessaRepository()
    
    @requires_auth(permission=[os.getenv('GESTORE'), os.getenv('INCARICATO')])
    def get_item_by_id(self, request: Request, pk: int):
        try:
            commessa = TipoCommessa.objects.get(id=pk)
            serializer = CommessaSerializer(commessa)
            return Response(serializer.data, status=status.HTTP_200_OK)

        except TipoCommessa.DoesNotExist:
            return Response({'detail': 'Commessa non trovata.'}, status=status.HTTP_404_NOT_FOUND)

        except Exception as e:
            print(e)
            return Response({'detail': 'An error occurred.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
    
    @requires_auth(permission=[os.getenv('GESTORE'), os.getenv('INCARICATO')])
    def get_items(self, request: Request):
        try:
            commesse = TipoCommessa.objects.filter(attivo=True)
            serializer = CommessaSerializer(commesse, many=True)
            data = serializer.data

            return Response(data, status=status.HTTP_200_OK)

        except Exception as e:
            print(e)
            return Response({'detail': 'An error occurred.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        
    @requires_auth(permission=[os.getenv('GESTORE'), os.getenv('INCARICATO')])
    def get_fascicoli(self, request: Request):
        try:
            fascicoli = Fascicolo.objects.filter(attivo=True)
            serializer = FascicoloSerializer(fascicoli, many=True)
            data = serializer.data

            return Response(data, status=status.HTTP_200_OK)

        except Exception as e:

            return Response({'detail': 'An error occurred.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)