from flask import Blueprint

rss_bp = Blueprint("rss", __name__)


@rss_bp.route("/feed/<name>/rss.xml")
def feed(name):
    if name not in data.POSTS:
        abort(404)
    entries = []
    for post in data.get_posts(name, data.STATE_PUBLISHED, end=50):
        post["timestamp"] = post[data.TIMESTAMP]
        post["link"] = url_for(
            "post", name=name, timestamp=post["timestamp"], _external=True
        )
        entries.append({"content": post})
    title = f"{data.POSTS[name]} AFPy.org"
    return render_template(
        "rss.xml",
        entries=entries,
        title=title,
        description=title,
        link=url_for("feed", name=name, _external=True),
    )


@rss_bp.route("/planet/")
@rss_bp.route("/planet/rss.xml")
def planet():
    entries = []
    for name, url in PLANET.items():
        for entry in feedparser.parse(url).entries:
            if hasattr(entry, "updated_parsed"):
                date = entry.updated_parsed
            elif hasattr(entry, "published_parsed"):
                date = entry.published_parsed
            else:
                date = time.time()
            entry["timestamp"] = time.mktime(date) if date else time.time()
            entries.append({"feed": name, "content": entry})
    entries.sort(reverse=True, key=lambda entry: entry["content"]["timestamp"])
    return render_template(
        "rss.xml",
        entries=entries,
        title="Planet Python francophone",
        description="Nouvelles autour de Python en français",
        link=url_for("planet", _external=True),
    )