import datetime

from rest_framework import serializers
from django_filters.rest_framework import FilterSet
import django_filters
from app.models import XZNSH
import logging
logger = logging.getLogger('mylogger')


class SerialMyModel(serializers.ModelSerializer):
    class Meta:
        model = XZNSH
        fields = "__all__"


class SerialFilter(FilterSet):
    """
    过滤器,支持模糊查询
    record_time,日期时间格式,如 2023-01-01 00:00:00
    police_id,支持模糊匹配
    event_type,支持模糊匹配
    """
    record_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='icontains')
    scene = django_filters.CharFilter(field_name='scene', lookup_expr='icontains')
    event_type = django_filters.CharFilter(field_name='event_type', lookup_expr='icontains')
    # 记录时间范围查询
    start_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='gte')
    # end_time = django_filters.DateTimeFilter(field_name='record_time', lookup_expr='lte')
    end_time = django_filters.DateTimeFilter(field_name='record_time', method='time_range_filter')
    # todo bug: start_time 和 end_time同一天的情况   done
    violation = django_filters.NumberFilter(field_name='is_violation', method='is_violation_query')
    violation_type = django_filters.CharFilter(field_name='violation_reason', lookup_expr='icontains')

    def time_range_filter(self, queryset, name, value):
        """
                @params queryset: 为objects.all()返回的合集, 即视图类中的的queryset
                @params name: 为field_name
                @params value: 为前端通过end_time字段传过来的值
        """

        return queryset.filter(record_time__lte=value + datetime.timedelta(days=1))

    def is_violation_query(self, queryset, name, value):
        if value == 2:
            return queryset
        elif value == 1:
            return queryset.filter(is_violation=True)
        elif value == 0:
            return queryset.filter(is_violation=False)
        else:
            return queryset.filter(is_violation=True)

    class Meta:
        # 指定模型
        models = XZNSH
        # 指定需要模糊查询的字段
        fields = ("record_time", "scene", "event_type", "ai_analysis",)