"""Apply or revoke subscription benefits on profiles and companies."""
from seekers.models import SeekerProfile

from .plan_limits import DEFAULT_COMPANY_NO_SUB, DEFAULT_SEEKER_FREE, get_seeker_plan_benefits


def sync_seeker_subscription_benefits(subscription):
    profile = SeekerProfile.objects.filter(user=subscription.user).first()
    if not profile:
        return

    if subscription.is_valid:
        benefits = get_seeker_plan_benefits(subscription.plan.slug)
    else:
        benefits = DEFAULT_SEEKER_FREE

    profile.tier = benefits.tier
    profile.is_featured = benefits.is_featured
    profile.save(update_fields=['tier', 'is_featured', 'updated_at'])


def revoke_seeker_subscription_benefits(user):
    profile = SeekerProfile.objects.filter(user=user).first()
    if not profile:
        return

    benefits = DEFAULT_SEEKER_FREE
    profile.tier = benefits.tier
    profile.is_featured = benefits.is_featured
    profile.save(update_fields=['tier', 'is_featured', 'updated_at'])


def sync_company_subscription_benefits(subscription):
    company = subscription.company
    benefits = subscription.effective_benefits

    company.tier = benefits.tier
    company.is_featured = benefits.is_featured
    company.save(update_fields=['tier', 'is_featured', 'updated_at'])


def revoke_company_subscription_benefits(company):
    benefits = DEFAULT_COMPANY_NO_SUB
    company.tier = benefits.tier
    company.is_featured = benefits.is_featured
    company.save(update_fields=['tier', 'is_featured', 'updated_at'])
