"""passbook core signals"""
from django.core.cache import cache
from django.core.signals import Signal
from django.db.models.signals import post_save
from django.dispatch import receiver
from structlog import get_logger

LOGGER = get_logger()

user_signed_up = Signal(providing_args=["request", "user"])
invitation_created = Signal(providing_args=["request", "invitation"])
invitation_used = Signal(providing_args=["request", "invitation", "user"])
password_changed = Signal(providing_args=["user", "password"])


@receiver(post_save)
# pylint: disable=unused-argument
def invalidate_policy_cache(sender, instance, **_):
    """Invalidate Policy cache when policy is updated"""
    from passbook.core.models import Policy
    from passbook.policies.process import cache_key

    if isinstance(instance, Policy):
        LOGGER.debug("Invalidating policy cache", policy=instance)
        prefix = cache_key(instance) + "*"
        keys = cache.keys(prefix)
        cache.delete_many(keys)
        LOGGER.debug("Deleted %d keys", len(keys))