"""
Audit Log Views.
"""
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework import filters, permissions, viewsets
from rest_framework.decorators import action
from rest_framework.response import Response

from .models import AuditLog
from .serializers import AuditLogListSerializer, AuditLogSerializer


class AuditLogViewSet(viewsets.ReadOnlyModelViewSet):
    """لاگ‌های Audit — فقط خواندنی."""
    queryset = AuditLog.objects.all()
    permission_classes = [permissions.IsAuthenticated]
    filter_backends = [DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter]
    filterset_fields = ['action', 'resource_type', 'module', 'user_email']
    search_fields = ['resource_repr', 'user_email', 'user_display_name']
    ordering_fields = ['created_at', 'action', 'module']
    ordering = ['-created_at']

    def get_serializer_class(self):
        if self.action == 'list':
            return AuditLogListSerializer
        return AuditLogSerializer

    @action(detail=False, methods=['get'], url_path='resource/(?P<resource_type>[^/]+)/(?P<resource_id>[^/]+)')
    def resource_history(self, request, resource_type=None, resource_id=None):
        """تاریخچه تغییرات یک موجودیت خاص."""
        logs = self.get_queryset().filter(
            resource_type=resource_type,
            resource_id=resource_id,
        )
        page = self.paginate_queryset(logs)
        if page is not None:
            serializer = AuditLogSerializer(page, many=True)
            return self.get_paginated_response(serializer.data)
        serializer = AuditLogSerializer(logs, many=True)
        return Response({'data': serializer.data})
