
"""
roviditesnek tuno szo?
+¦¦ megfelel a formanak?
-   +¦¦ legalabb 2 nagybetu (pl. ERP, GDP)
-   +¦¦ szam + betu kombinacio (pl. B2B, B2C)
-   +¦¦ camelCase-szeru vegyes minta (pl. eIDAS, IoT)
-   +¦¦ pontot tartalmazo technikai kifejezes (pl. .NET, C++)
-   L¦¦ egyeb nem tipikus forma         › NEM ROVIDITES
+¦¦ eloszor fordul elo?
-   +¦¦ zarojelben van?
-   -   +¦¦ elotte van legalabb 2 szo?
-   -   -   +¦¦ nagy kezdobetus szavak?
-   -   -   -   +¦¦ nem nev?            › FEL VAN OLDVA
-   -   -   -   L¦¦ nev / cegnev        › NEM FELOLDAS
-   -   -   L¦¦ csak 1 szo              › NEM FELOLDAS
-   -   L¦¦ nincs ertelmezheto elotte   › NEM FELOLDAS
-   L¦¦ nincs zarojel                   › NINCS FELOLDVA
L¦¦ nem elso elofordulas?
    +¦¦ korabban jol fel lett oldva?   › RENDBEN, HASZNALHATO
    L¦¦ nem lett elotte feloldva       › HIBAS HASZNALAT

dokumentumban mar van „roviditesjegyzek” szo?
+¦¦ igen      › nem nyulunk hozza
L¦¦ nincs     › hozzaadunk a vegere egyet

jegyzekbe bekerul:
+¦¦ csak a helyesen feloldott roviditesek
L¦¦ formatum: ROVIDITES: Feloldas

specko esetek (C++, .NET, iOS)?
+¦¦ whitelistben van?                  › nem kotelezo feloldani
L¦¦ nincs whitelist                    › szabalyok szerint vizsgaljuk


"""



import re
from docx import Document

# itt kapjuk meg a szoveget
def beolvas_szoveget(docx_utvonal: str) -> str:
    dokumentum = Document(docx_utvonal)
    return "\n".join(p.text for p in dokumentum.paragraphs)

# tipikus rovidites formakat vizsgalunk
def rovidites_forma(szo: str) -> bool:
    minta = r'[A-Z]{2,6}|[A-Z][a-z]+[A-Z]{1,}[a-z]*|[A-Z]?[0-9]+[A-Z]+'
    return bool(re.fullmatch(minta, szo))

# itt keressu, hogy helyesen van-e hasznalva a rovidites es feloldas paros
def rovidites_elemzes(szoveg: str):
    roviditesek = {}
    print(" Rövidítés–feloldás párok keresése...")

    # 1. feloldasos roviditesek bevezetese (pl. Business to Business (B2B))
    paros_minta = r'''
([A-Z][a-z]+            # nagy kezdobetus szo, pl. Business
(?:\s+[A-Za-z0-9]+)+)   # utana meg legalabb 1 nagy kezdobetus pl. to Business
\s+                     # egy v tobb szokoz
\(                      # nyitasi zarojel
([A-Za-z0-9\+\.]{2,10}) # maga a rovidites pl.: .NET
\)                      # bezarasi zarojel
'''
    for talalat in re.finditer(paros_minta, szoveg):
        feloldas = talalat.group(1)
        rovidites = talalat.group(2)
        print(f"? Talált páros: {feloldas} ({rovidites})")
        roviditesek[rovidites] = {
            "feloldas": feloldas,
            "feloldva": True
        }

    # 2. nem feloldott roviditesek keresese
    print("\n Egyéb rövidítések vizsgálata...")
    szavak = szoveg.replace("\n", " ").split()
    for index, szo in enumerate(szavak):
        tisztitott = szo.strip(".,():;\"")
        if rovidites_forma(tisztitott) and tisztitott not in roviditesek:
            print(f"? Nincs feloldva: {tisztitott} (pozíció: {index})")
            roviditesek[tisztitott] = {
                "feloldas": "",
                "feloldva": False
            }
        elif tisztitott in roviditesek:
            print(f" Rövidítés újrahasználva: {tisztitott}")

    return roviditesek

# roviditesjegyzek letrehozasa
def jegyzek_hozzaadas(docx_bemenet: str, roviditesek: dict, docx_kimenet: str):
    dokumentum = Document(docx_bemenet)

    # vizsgalat h van-e mar
    if any("rövidítésjegyzék" in p.text.lower() for p in dokumentum.paragraphs):
        print(" A dokumentum már tartalmaz rövidítésjegyzéket.")
        return

    dokumentum.add_page_break()
    dokumentum.add_heading("Rövidítésjegyzék", level=1)

    beillesztheto = sorted(
        [(r, adat["feloldas"]) for r, adat in roviditesek.items() if adat["feloldva"]],
        key=lambda x: x[0].lower()
    )

    print("\n A jegyzékbe kerül:")
    for rovidites, feloldas in beillesztheto:
        print(f"   {rovidites}: {feloldas}")
        dokumentum.add_paragraph(f"{rovidites}: {feloldas}")

    dokumentum.save(docx_kimenet)
    print(f"\n? Dokumentum mentve: {docx_kimenet}")


# ezt irjuk at a kivant dokumentumokra es helyeire
bemeneti_utvonal = r"EZT KELL ATIRNI, VIZSGALANDO DOKUMENTUM ITT VAN"
kimeneti_utvonal = r"EZT KELL ATIRNI, LETREHOZOTT DOKUMENTUM ITT LESZ"

szoveg = beolvas_szoveget(bemeneti_utvonal)
rovidites_adatok = rovidites_elemzes(szoveg)
jegyzek_hozzaadas(bemeneti_utvonal, rovidites_adatok, kimeneti_utvonal)

# LLM prompt generalasa

print("\n?? Generált LLM prompt a konzolba másoláshoz:\n")

prompt_sorok = [
    "Ellenőrizd, hogy az alábbi dokumentumban szereplő rövidítések közül mindegyik szerepel-e a rövidítésjegyzékben.",
    "",
    " Dokumentumban talált rövidítések:"
]

for rovidites, adat in rovidites_adatok.items():
    if adat["feloldva"]:
        prompt_sorok.append(f"- {rovidites}: {adat['feloldas']} (feloldva)")
    else:
        prompt_sorok.append(f"- {rovidites} (nincs feloldva)")

prompt_sorok.append("\n A dokumentum végén található rövidítésjegyzék:")
for bejegyzes in Document(kimeneti_utvonal).paragraphs:
    if ": " in bejegyzes.text:
        prompt_sorok.append(f"- {bejegyzes.text}")

prompt_sorok.append("\n Feladat:")
prompt_sorok.append("Írd meg, hogy a rövidítésjegyzék teljes-e.")
prompt_sorok.append("• Ha hiányzik olyan rövidítés, ami a szövegben fel volt oldva › jelezd!")
prompt_sorok.append("• Ha olyan van a jegyzékben, ami a szövegben nem szerepelt › jelezd!")
prompt_sorok.append("• Ellenőrizd, hogy a jegyzék betartja-e a szabályokat.")

prompt_sorok.append("\n Szabály, amit figyelned kell:")
prompt_sorok.append(
    "„Minden rövidítést a szakkifejezés első említésekor ennek teljesen kiírt, zárójeles változatával kell tisztázni "
    "az olvasók számára. Ezt követően CSAK a rövidítés használható, vagy nem kell bevezetni a rövidítést és csak a teljes "
    "szakszó használandó. A rövidítések jegyzékébe a zárójelben első említéskor kiírt szövegnek kell szerepelnie mindenkor változatlanul.”"
)

print("\n".join(prompt_sorok))

