#
# Erminig - Recupération de la dernière version d'un soft sur page Sourceforge
# Copyright (C) 2025 L0m1g
# Sous licence DOUARN - Voir le fichier LICENCE pour les détails
#
# Ce fichier fait partie du projet Erminig.
# Libre comme l’air, stable comme un menhir, et salé comme le beurre.
#

import re
import requests
import xml.etree.ElementTree as ET
from erminig.controllers.evezh.abstract import UpstreamSource
from erminig.system.retry import retry_on_failure


class SourceForgeRSS(UpstreamSource):

    @retry_on_failure()
    def get_latest(self):
        rss_url = self.config["sourceforge"]
        r = requests.get(rss_url, timeout=10)
        r.raise_for_status()
        root = ET.fromstring(r.text)
        items = root.findall(".//item")

        versions = []
        for item in items:
            title = item.findtext("title") or ""
            match = re.search(r"([0-9]+\.[0-9]+(?:\.[0-9]+)?)", title)
            if match:
                version = match.group(1)
                link = item.findtext("link")
                versions.append((version, link))

        if not versions:
            print(f"[{self.name}] Aucune version trouvée via RSS.")
            return None

        latest = sorted(versions, key=lambda x: list(map(int, x[0].split("."))))[-1]
        print(latest[1])
        return {"name": self.name, "version": latest[0], "url": latest[1]}
