from django.db.models import Count, Q, QuerySet

from .models import Park


def get_base_park_queryset() -> QuerySet[Park]:
    """Get base queryset with all needed annotations and prefetches"""
    return (
        Park.objects.select_related("operator", "property_owner", "location")
        .prefetch_related("photos", "rides")
        .annotate(
            current_ride_count=Count("rides", distinct=True),
            current_coaster_count=Count("rides", filter=Q(rides__category="RC"), distinct=True),
        )
        .order_by("name")
    )
