from django.db.models.signals import post_save
from django.dispatch import receiver

from accounts.models import User


@receiver(post_save, sender=User)
def grant_admin_subscriptions(sender, instance, **kwargs):
    if instance.is_platform_admin:
        from subscriptions.access import ensure_platform_admin_subscriptions

        ensure_platform_admin_subscriptions(instance)


@receiver(post_save, sender=User)
def notify_on_new_account(sender, instance, created, raw=False, **kwargs):
    if not created or raw or instance.is_platform_admin:
        return
    from accounts import events

    events.welcome(instance)
    events.admin_new_user(instance)


def _connect_other_apps():
    from companies.models import Company
    from subscriptions.models import SubscriptionPayment
    from testimonials.models import Testimonial

    @receiver(post_save, sender=Company, weak=False)
    def _company_created(sender, instance, created, raw=False, **kwargs):
        if created and not raw:
            from accounts import events

            events.admin_new_company(instance)

    @receiver(post_save, sender=Testimonial, weak=False)
    def _testimonial_created(sender, instance, created, raw=False, **kwargs):
        if created and not raw and not instance.is_approved:
            from accounts import events

            events.admin_testimonial(instance)

    @receiver(post_save, sender=SubscriptionPayment, weak=False)
    def _payment_created(sender, instance, created, raw=False, **kwargs):
        if created and not raw:
            from accounts import events

            events.admin_payment(instance)
