from django.core.cache import cache
from django.db.models.signals import post_delete, post_save
from django.dispatch import receiver

from .models.category import Category  # 导入你的Category模型
from .models.tag import Tag


@receiver([post_save, post_delete], sender=Category)
def clear_category_cache_on_save_or_delete(sender, instance, **kwargs):
    """
    当Category模型实例被保存或删除时，清除其相关的缓存。
    保存包括创建（create）和更新（update）。
    """
    try:
        # 1. 删除该分类实例的绝对URL缓存
        url_cache_key = f"category_{instance.id}_absolute_url"
        cache.delete(url_cache_key)

        # 2. 删除全局的subdomain标志缓存
        subdomain_flag_key = 'category_subdomain_flag'
        cache.delete(subdomain_flag_key)

    except Exception as e:
        # 异常处理非常重要，避免信号处理过程中的错误导致主流程失败
        print(f"Error clearing cache for Category {instance.id}: {e}")


# 如果您使用了 bulk_create，需要特别注意，它不会触发 save信号或模型的 save方法。
@receiver(post_save, sender=Tag)
def clear_tag_count_cache_on_save(sender, instance, created, **kwargs):
    """
    当 Tag 对象被保存（创建或更新）后，如果是新创建的，则清除总数缓存。
    """
    if created:
        Tag._clear_total_count_cache()


@receiver(post_delete, sender=Tag)
def clear_tag_count_cache_on_delete(sender, instance, **kwargs):
    """
    当 Tag 对象被删除后，清除总数缓存。
    """
    Tag._clear_total_count_cache()