"""Homepage carousel - only active paid subscribers appear."""

from django.db.models import Q

from django.utils import timezone



from accounts.visibility import visible_companies, visible_seekers

from subscriptions.models import SubscriptionPlan





def _active_subscription_q(*, prefix):

    """Match subscriptions that are active, not expired, and on an active plan."""

    now = timezone.now()

    return (

        Q(**{f'{prefix}is_active': True})

        & (Q(**{f'{prefix}expires_at__isnull': True}) | Q(**{f'{prefix}expires_at__gt': now}))

        & Q(**{f'{prefix}plan__is_active': True})

        & Q(**{f'{prefix}plan__price_monthly__gt': 0})

    )





def carousel_companies_queryset():

    """Subscribed companies that are public, online, and on a paid active plan."""

    return (

        visible_companies(online_only=True)

        .filter(_active_subscription_q(prefix='subscription__'))

        .filter(subscription__plan__audience=SubscriptionPlan.Audience.COMPANY)

        .select_related('subscription', 'subscription__plan')

        .order_by('-subscription__plan__price_monthly', '-is_featured', '-tier', 'name')

        .distinct()

    )





def carousel_seekers_queryset():

    """Subscribed seekers (Professional Plus) that are public and online."""

    return (

        visible_seekers(online_only=True)

        .filter(_active_subscription_q(prefix='user__seeker_subscription__'))

        .filter(user__seeker_subscription__plan__audience=SubscriptionPlan.Audience.SEEKER)

        .select_related('user', 'user__seeker_subscription', 'user__seeker_subscription__plan')

        .order_by(

            '-user__seeker_subscription__plan__price_monthly',

            '-is_featured',

            '-tier',

            'full_name',

        )

        .distinct()

    )


