from rest_framework import generics
from rest_framework.permissions import IsAdminUser
from django.utils.dateparse import parse_datetime
from .models import AuditLog
from .serializers import AuditLogSerializer


class AuditLogListView(generics.ListAPIView):
    permission_classes = (IsAdminUser,)
    serializer_class = AuditLogSerializer
    queryset = AuditLog.objects.all().order_by('-created_at')

    def get_queryset(self):
        qs = super().get_queryset()
        user = self.request.query_params.get('user')
        action = self.request.query_params.get('action')
        entity_type = self.request.query_params.get('entity_type')
        from_date = self.request.query_params.get('from')
        to_date = self.request.query_params.get('to')

        if user:
            qs = qs.filter(user__id=user)
        if action:
            qs = qs.filter(action=action)
        if entity_type:
            qs = qs.filter(entity_type=entity_type)
        if from_date:
            try:
                qs = qs.filter(created_at__gte=parse_datetime(from_date))
            except Exception:
                pass
        if to_date:
            try:
                qs = qs.filter(created_at__lte=parse_datetime(to_date))
            except Exception:
                pass
        return qs
