# audit/views.py

from rest_framework import viewsets, permissions
from account.models import UserAuditLog
from account.serializers.logs import UserAuditLogSerializer

from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.filters import SearchFilter

from shop_management.views.data.pagination import CustomPagination
from account.permissions import accessible_shops
class IsAdminOrReadOnly(permissions.BasePermission):
    """
    Custom permission to only allow admins to view audit logs.
    """

    def has_permission(self, request, view):
        return bool(request.user and request.user.is_staff)

class UserAuditLogViewSet(viewsets.ReadOnlyModelViewSet):
    """
    A viewset for viewing UserAuditLog instances.
    """

    queryset = UserAuditLog.objects.all().order_by('-timestamp')
    serializer_class = UserAuditLogSerializer
    permission_classes = [permissions.IsAuthenticated, IsAdminOrReadOnly]

    filter_backends = [DjangoFilterBackend, SearchFilter]
    search_fields = ['user__username', 'changed_by__username', 'model_name', 'reference', 'object_id']
    filterset_fields = ['action', 'model_name', 'branch_id', 'changed_by']
    pagination_class = CustomPagination
    
    def get_queryset(self):
        queryset = super().get_queryset()
        user_id = self.request.query_params.get('user_id')
        action = self.request.query_params.get('action')
        if not self.request.user.is_superuser:
            queryset = queryset.filter(
                branch_id__in=accessible_shops(self.request.user, self.request).values("pk")
            )
        if user_id:
            queryset = queryset.filter(user__id=user_id)
        if action:
            queryset = queryset.filter(action=action)
        return queryset
