import logging

from django.utils import timezone

from djangoblog.utils import cache, get_blog_setting
from .models import Category, Article

logger = logging.getLogger(__name__)


def seo_processor(requests):
    """
    SEO上下文处理器

    这个函数是一个Django上下文处理器，用于向所有模板传递SEO相关的变量。
    它使用缓存来提高性能，避免每次请求都查询数据库。

    Args:
        requests: Django请求对象，包含当前请求的信息

    Returns:
        dict: 包含SEO和网站设置信息的字典，这些变量将在所有模板中可用
    """
    # 缓存键名
    key = 'seo_processor'

    # 尝试从缓存中获取数据
    value = cache.get(key)
    if value:
        # 如果缓存存在，直接返回缓存数据
        return value
    else:
        # 缓存不存在，重新生成数据
        logger.info('set processor cache.')

        # 获取博客全局设置
        setting = get_blog_setting()

        # 构建包含所有SEO和网站设置信息的字典
        value = {
            # 网站基本信息
            'SITE_NAME': setting.site_name,  # 网站名称
            'SITE_SEO_DESCRIPTION': setting.site_seo_description,  # SEO描述
            'SITE_DESCRIPTION': setting.site_description,  # 网站描述
            'SITE_KEYWORDS': setting.site_keywords,  # 网站关键词

            # 网站URL相关
            'SITE_BASE_URL': requests.scheme + '://' + requests.get_host() + '/',  # 网站基础URL

            # 文章相关设置
            'ARTICLE_SUB_LENGTH': setting.article_sub_length,  # 文章摘要长度

            # 导航数据
            'nav_category_list': Category.objects.all(),  # 所有分类（用于导航菜单）
            'nav_pages': Article.objects.filter(
                type='p',  # 页面类型
                status='p'),  # 已发布状态

            # 评论系统设置
            'OPEN_SITE_COMMENT': setting.open_site_comment,  # 是否开启评论
            'COMMENT_NEED_REVIEW': setting.comment_need_review,  # 评论是否需要审核

            # 备案信息
            'BEIAN_CODE': setting.beian_code,  # ICP备案号
            "BEIAN_CODE_GONGAN": setting.gongan_beiancode,  # 公安备案号
            "SHOW_GONGAN_CODE": setting.show_gongan_code,  # 是否显示公安备案

            # 广告相关
            'SHOW_GOOGLE_ADSENSE': setting.show_google_adsense,  # 是否显示Google广告
            'GOOGLE_ADSENSE_CODES': setting.google_adsense_codes,  # Google广告代码

            # 统计代码
            'ANALYTICS_CODE': setting.analytics_code,  # 网站统计代码（如百度统计）

            # 时间信息
            "CURRENT_YEAR": timezone.now().year,  # 当前年份

            # 全局页头页脚
            "GLOBAL_HEADER": setting.global_header,  # 全局头部HTML
            "GLOBAL_FOOTER": setting.global_footer,  # 全局尾部HTML
        }

        # 将数据存入缓存，有效期10小时（60 * 60 * 10秒）
        cache.set(key, value, 60 * 60 * 10)

        return value