"""GNews.io kolektorius.

Nemokamas planas: 100 užklausų / dieną.
Endpoint /api/v4/top-headlines?country=xx&token=...
"""

from __future__ import annotations

from typing import List

from .base import BaseCollector, TrendItem


class GNewsCollector(BaseCollector):
    name = "gnews"
    source_type = "gnews"
    BASE = "https://gnews.io/api/v4/top-headlines"

    def __init__(self, *, db, http, cfg):
        super().__init__(db=db, http=http, cfg=cfg)
        self.api_key = (cfg.get("api_keys", {}) or {}).get("gnews") or ""

    def collect_for_country(self, country) -> List[TrendItem]:
        if not self.api_key:
            return []
        params = {
            "country": country.iso_code.lower(),
            "lang": (country.primary_language or "en"),
            "max": 25,
            "token": self.api_key,
        }
        data = self.http.get_json(self.BASE, params=params, respect_robots=False)
        if not data:
            return []
        items: List[TrendItem] = []
        for rank, art in enumerate(data.get("articles", []) or [], start=1):
            title = (art.get("title") or "").strip()
            if not title:
                continue
            items.append(TrendItem(
                keyword=title,
                trend_type="hourly",
                rank=rank,
                score=max(0.0, 1.0 - (rank - 1) / 25),
                language=country.primary_language,
                description=(art.get("description") or "")[:1000],
                url=art.get("url"),
            ))
        self.log.info("[%s] GNews: %d", country.iso_code, len(items))
        return items
