import re
from pathlib import Path

CHANGELOG_PATH = Path(__file__).resolve().parent / "CHANGELOG.md"

_FEJLEC_MINTA = re.compile(r"^##\s*v(\S+)\s*[–-]\s*(\d{4}-\d{2}-\d{2})")


def valtozasnaplo_beolvasasa() -> list[dict]:
    """Beolvassa és bejegyzésekre bontja a CHANGELOG.md-t - minden "## v<szám> – <dátum>" kezdetű
    sor egy új bejegyzés, az alatta lévő "- " kezdetű sorok a hozzá tartozó tételek (a többsoros,
    behúzott folytatás-sorokat is hozzáfűzi az előző tételhez). A rendszeradmin felület ebből
    jeleníti meg a verziótörténetet - így éles telepítés után csak ezt az egy fájlt kell
    frissíteni, a verziószám sehol máshol nincs duplikálva a kódban."""
    if not CHANGELOG_PATH.exists():
        return []

    bejegyzesek = []
    aktualis = None
    for sor in CHANGELOG_PATH.read_text(encoding="utf-8").splitlines():
        fejlec = _FEJLEC_MINTA.match(sor)
        if fejlec:
            aktualis = {"verzio": fejlec.group(1), "datum": fejlec.group(2), "tetelek": []}
            bejegyzesek.append(aktualis)
        elif aktualis is not None:
            if sor.strip().startswith("- "):
                aktualis["tetelek"].append(sor.strip()[2:])
            elif sor.strip() and aktualis["tetelek"]:
                # egy tétel folytatása a következő, behúzott sorban
                aktualis["tetelek"][-1] += " " + sor.strip()
    return bejegyzesek


def jelenlegi_verzio() -> dict | None:
    """A legfelső (legújabb) changelog-bejegyzés - ez a szerveren ténylegesen futó kód verziója,
    feltéve hogy a CHANGELOG.md minden éles telepítéskor frissül."""
    bejegyzesek = valtozasnaplo_beolvasasa()
    return bejegyzesek[0] if bejegyzesek else None
