"""Track B: refresh trending topics via Anthropic (niche research, not blog URL scrape)."""

from __future__ import annotations

import logging

from django.conf import settings as django_settings
from django.utils import timezone

from blogs.models import BlogArticle, BlogSettings
from blogs.services.anthropic_utils import claude_json

logger = logging.getLogger(__name__)


def refresh_trending_topics(settings_obj: BlogSettings | None = None) -> list[dict]:
    settings_obj = settings_obj or BlogSettings.load()
    description = (settings_obj.description or "").strip()
    if not description:
        raise ValueError("description is required for trending topic research")

    db_titles = list(
        BlogArticle.objects.exclude(title="").values_list("title", "target_keyword")[:30]
    )
    db_hint = ", ".join(f"{t}/{k}" for t, k in db_titles if t) or "none"

    max_topics = getattr(django_settings, "BLOG_TRENDING_TOPICS_MAX", 15)
    lang = settings_obj.language or "de"
    store = settings_obj.store_name or "Store"
    audience = settings_obj.target_audience or ""

    system = (
        f"You are an SEO trend researcher for {store}. "
        f"Language/market: {lang}. "
        "Return ONLY a JSON array of objects with: keyword, title_hint, "
        "relevance_score (0-1 number), reason (one sentence). "
        "Topics must be timely search/blog opportunities for this niche — "
        "not a list of what one store already published."
    )
    user = (
        f"Niche / store description:\n{description}\n\n"
        f"Target audience: {audience or 'general'}\n"
        f"In-app articles already planned (avoid duplicating these angles): {db_hint}\n\n"
        f"Propose {max_topics} trending blog topic opportunities for this niche right now."
    )

    try:
        topics = claude_json(system, user, temperature=0.6)
        settings_obj.trending_topics = topics[:max_topics]
        settings_obj.trending_topics_updated_at = timezone.now()
        settings_obj.trending_topics_error = ""
        settings_obj.save(
            update_fields=[
                "trending_topics",
                "trending_topics_updated_at",
                "trending_topics_error",
                "updated_at",
            ]
        )
        return settings_obj.trending_topics
    except Exception as exc:
        logger.exception("trending topics refresh failed")
        settings_obj.trending_topics_error = str(exc)
        settings_obj.save(update_fields=["trending_topics_error", "updated_at"])
        raise
