"""
SEO Sitemap 插件
订阅 product_updated / product_created / category_updated 信号
标记 sitemap 需要重新生成（P0 阶段：只记录日志，不实际生成 sitemap）
"""
import logging
from pathlib import Path
from fastapi import FastAPI
from app.core.signals import product_created, product_updated, category_updated

logger = logging.getLogger(__name__)

# sitemap dirty flag 文件路径
_SITEMAP_DIRTY_FILE = Path("/tmp/sme_sitemap_dirty.flag")


def _mark_dirty(reason: str) -> None:
    """写 dirty flag，日志说明"""
    logger.info("[seo_sitemap] sitemap dirty marked: %s", reason)
    _SITEMAP_DIRTY_FILE.write_text(reason)


def init_plugin(app: FastAPI) -> None:
    @product_created.connect
    def on_product_created(sender, product, tenant_id, **kwargs) -> None:
        _mark_dirty(f"product_created id={getattr(product, 'id', '?')} tenant_id={tenant_id}")

    @product_updated.connect
    def on_product_updated(sender, product, tenant_id, **kwargs) -> None:
        _mark_dirty(f"product_updated id={getattr(product, 'id', '?')} tenant_id={tenant_id}")

    @category_updated.connect
    def on_category_updated(sender, category, tenant_id, **kwargs) -> None:
        _mark_dirty(f"category_updated id={getattr(category, 'id', '?')} tenant_id={tenant_id}")
