"""Content Engine — signal handlers.

Auto-creates ActivityFeed entries when content items change state.
"""

from __future__ import annotations

from simorgh.apps.events.bus import subscribe


@subscribe("content.item_created")
def _on_content_created(payload: dict) -> None:
    _record_activity("created", payload)


@subscribe("content.item_published")
def _on_content_published(payload: dict) -> None:
    _record_activity("published", payload)


@subscribe("content.item_archived")
def _on_content_archived(payload: dict) -> None:
    _record_activity("archived", payload)


def _record_activity(verb: str, payload: dict) -> None:
    try:
        from django.contrib.contenttypes.models import ContentType

        from simorgh.apps.content.models import ContentItem
        from simorgh.apps.platform_core.models import Activity

        item_id = payload.get("item_id")
        tenant_id = payload.get("tenant_id")
        actor_id = payload.get("actor_id")

        if not item_id or not tenant_id:
            return

        item = ContentItem.objects.filter(public_id=item_id, tenant_id=tenant_id).first()
        if not item:
            return

        Activity.objects.create(
            tenant_id=tenant_id,
            organization_node_id=item.organization_node_id,
            actor_id=actor_id,
            verb=f"content.{verb}",
            content_type=ContentType.objects.get_for_model(ContentItem),
            object_id=item.pk,
            occurred_at=item.updated_at,
            extra={
                "title": item.title,
                "content_type": item.content_type,
                "public_id": str(item.public_id),
            },
        )
    except Exception:
        import structlog
        _log = structlog.get_logger("simorgh.content.signals")
        _log.warning("content.activity_record_failed", payload=payload, exc_info=True)
