"""Every proposal for every published article, as one CSV."""
import csv

from app.database import SessionLocal
from app.models.article import Article
from app.services import crosslink

db = SessionLocal()
articles = db.query(Article).filter(Article.deleted_at.is_(None),
                                    Article.status == "published").order_by(Article.id).all()
variants = {}
for a in articles:
    for s in (a.sections or []):
        variants[(a.id, s.get("id"))] = s.get("variant") or ""

rows = 0
with open("/app/crosslinks-proposals.csv", "w", newline="") as handle:
    out = csv.writer(handle)
    out.writerow(["article_id", "article_title", "section_id", "section_title",
                  "variant", "line", "offset", "term", "reason",
                  "target_article_id", "target_title"])
    for index, article in enumerate(articles, 1):
        for p in crosslink.propose(db, article):
            out.writerow([article.id, article.title, p["section_id"], p["section_title"],
                          variants.get((article.id, p["section_id"]), ""),
                          p["line"], p["offset"], p["term"], p["reason"],
                          p["target_article_id"], p["target_title"]])
            rows += 1
        if index % 50 == 0:
            print(f"  {index}/{len(articles)} articles, {rows} proposals")
print(f"articles {len(articles)}, proposals {rows}")
db.close()
