"""Приведение записей источников к единой record-форме (ключ metric)."""
from collections import defaultdict
from typing import List


def tg_to_records(fw_records) -> List[dict]:
    """Метрика решается НА КАНАЛ: если канал отдаёт реакции (t.me/s их показывает),
    скорим по реакциям — это ближе к «залетело», по духу как шеры/форварды, которых
    t.me/s не даёт. Если у канала реакций нет — скорим по просмотрам."""
    by_acc = defaultdict(list)
    for r in fw_records:
        by_acc[r["account"]].append(r)
    out = []
    for acc, recs in by_acc.items():
        has_reactions = any(r.get("likes") is not None for r in recs)
        kind = "reactions" if has_reactions else "views"
        for r in recs:
            metric = r.get("likes") if has_reactions else r.get("views")
            out.append({
                "post_id": r["post_id"],
                "account": r["account"],
                "platform": "telegram",
                "caption": r.get("caption") or "",
                "posted_at": r["posted_at"],
                "metric": metric,
                "metric_kind": kind,
                "comments": r.get("comments"),
                "permalink": r["permalink"],
            })
    return out
