import django_filters

from apps.analytics.models import UserEvent, UserSession


class UserEventFilter(django_filters.FilterSet):
    """Filter for admin event queries."""

    user = django_filters.NumberFilter(field_name="user_id")
    event_type = django_filters.CharFilter()
    screen_name = django_filters.CharFilter(lookup_expr="icontains")
    target_type = django_filters.CharFilter()
    target_id = django_filters.CharFilter()
    platform = django_filters.CharFilter()
    session_id = django_filters.CharFilter()
    device_id = django_filters.CharFilter()
    date_from = django_filters.DateTimeFilter(field_name="created_at", lookup_expr="gte")
    date_to = django_filters.DateTimeFilter(field_name="created_at", lookup_expr="lte")

    class Meta:
        model = UserEvent
        fields = [
            "user", "event_type", "screen_name", "target_type",
            "target_id", "platform", "session_id", "device_id",
        ]


class UserSessionFilter(django_filters.FilterSet):
    """Filter for admin session queries."""

    user = django_filters.NumberFilter(field_name="user_id")
    platform = django_filters.CharFilter()
    device_id = django_filters.CharFilter()
    date_from = django_filters.DateTimeFilter(field_name="started_at", lookup_expr="gte")
    date_to = django_filters.DateTimeFilter(field_name="started_at", lookup_expr="lte")
    min_duration = django_filters.NumberFilter(field_name="duration_seconds", lookup_expr="gte")
    max_duration = django_filters.NumberFilter(field_name="duration_seconds", lookup_expr="lte")

    class Meta:
        model = UserSession
        fields = ["user", "platform", "device_id"]
