import django_filters
from django.db.models import Q

from apps.events.models import Event


class EventFilter(django_filters.FilterSet):
    search = django_filters.CharFilter(method="filter_search")
    start_date_after = django_filters.DateFilter(field_name="start_date", lookup_expr="gte")
    start_date_before = django_filters.DateFilter(field_name="start_date", lookup_expr="lte")
    end_date_after = django_filters.DateFilter(field_name="end_date", lookup_expr="gte")
    end_date_before = django_filters.DateFilter(field_name="end_date", lookup_expr="lte")
    is_active = django_filters.BooleanFilter(method="filter_is_active")

    class Meta:
        model = Event
        fields = []

    def filter_search(self, queryset, name, value):
        return queryset.filter(
            Q(name_en__icontains=value) | Q(name_ar__icontains=value)
        )

    def filter_is_active(self, queryset, name, value):
        """Filter events that are currently active (now between start_date and end_date)."""
        from django.utils import timezone

        now = timezone.now()
        if value:
            return queryset.filter(start_date__lte=now, end_date__gte=now)
        return queryset.filter(Q(end_date__lt=now) | Q(start_date__gt=now))
