"""Subscription access checks - platform admins are always treated as subscribed."""
from django.conf import settings
from django.utils import timezone

from subscriptions.models import CompanySubscription, SeekerSubscription, SubscriptionPlan


def user_has_seeker_subscription(user):
    if not user or not getattr(user, 'is_authenticated', False):
        return False
    if user.is_platform_admin:
        return True
    subscription = getattr(user, 'seeker_subscription', None)
    return bool(subscription and subscription.is_valid)


def user_has_seeker_plus(user):
    """Professional Plus - priority alerts and premium seeker features."""
    if not user or not getattr(user, 'is_authenticated', False):
        return False
    if user.is_platform_admin:
        return True
    subscription = getattr(user, 'seeker_subscription', None)
    return bool(
        subscription
        and subscription.is_valid
        and subscription.plan.slug == settings.SEEKER_PLUS_PLAN_SLUG
    )


def user_has_company_subscription(user, company=None):
    if not user or not getattr(user, 'is_authenticated', False):
        return False
    if user.is_platform_admin:
        return True
    if company is None:
        company = user.companies.filter(is_active=True).first()
    if not company:
        return False
    subscription = getattr(company, 'subscription', None)
    return bool(subscription and subscription.is_valid)


def ensure_platform_admin_subscriptions(user):
    """
    Grant permanent, non-expiring subscriptions to platform administrators.
    Called when an admin account is created or promoted.
    """
    if not user.is_platform_admin:
        return

    seeker_plan = SubscriptionPlan.objects.filter(
        slug=settings.SEEKER_PLUS_PLAN_SLUG,
        audience=SubscriptionPlan.Audience.SEEKER,
        is_active=True,
    ).first()
    if not seeker_plan:
        seeker_plan = (
            SubscriptionPlan.objects.filter(
                audience=SubscriptionPlan.Audience.SEEKER,
                is_active=True,
            )
            .order_by('-is_featured', 'sort_order', '-price_monthly')
            .first()
        )
    if seeker_plan:
        subscription, _created = SeekerSubscription.objects.update_or_create(
            user=user,
            defaults={
                'plan': seeker_plan,
                'is_active': True,
                'expires_at': None,
            },
        )
        from subscriptions.benefits import sync_seeker_subscription_benefits
        sync_seeker_subscription_benefits(subscription)

    company_plan = SubscriptionPlan.objects.filter(
        slug=settings.COMPANY_ENTERPRISE_PLAN_SLUG,
        audience=SubscriptionPlan.Audience.COMPANY,
        category=SubscriptionPlan.Category.RECRUITMENT,
        is_active=True,
    ).first()
    if not company_plan:
        company_plan = (
            SubscriptionPlan.objects.filter(
                audience=SubscriptionPlan.Audience.COMPANY,
                category=SubscriptionPlan.Category.RECRUITMENT,
                is_active=True,
            )
            .order_by('-is_featured', 'sort_order', '-price_monthly')
            .first()
        )
    if company_plan:
        for company in user.companies.all():
            subscription, _created = CompanySubscription.objects.update_or_create(
                company=company,
                defaults={
                    'plan': company_plan,
                    'is_active': True,
                    'expires_at': None,
                    'started_at': timezone.now(),
                },
            )
            from subscriptions.benefits import sync_company_subscription_benefits
            sync_company_subscription_benefits(subscription)
