from management.repositories.audit_log import AuditLogRepository
from management.serializers.audit_log_serializer import AuditLogSerializer

from .base import *

class AuditLogAPIView(GenericViewSet):
    authentication_classes = [TokenAuthentication]
    _repository = AuditLogRepository()

    @requires_auth(permission=[os.getenv('GESTORE'), os.getenv('INCARICATO')])
    def get_items(self, request: Request):
        try:
            args: FilterAndSorting = json.loads(request.body, object_hook=objJsonDecode)   
            filtered_set = self._repository.filtered(args)             
            serializer = AuditLogSerializer(filtered_set, 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 save_item(self, request: Request):
        try:
            with transaction.atomic():
                dto = request.data.dict() if hasattr(request.data, 'dict') else dict(request.data)
                status_result, result_data = self._repository.save(dto)
                if not status_result:
                    return Response({'detail': 'An error occurred.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
            return Response(GenericResponseObjectSerializer(GenericResponseObject(status=True)).data)
        except Exception as e:
            print(e)
            return Response({'detail': 'An error occurred.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
