import json
import os

FAJLNEV = "konyvtar.json"

def beolvas():
    """Beolvassa a konyvtar.json fájlt, ha létezik, különben alap struktúrát ad vissza."""
    if not os.path.exists(FAJLNEV):
        return {"konyvek": [], "tagok": []}
    with open(FAJLNEV, "r", encoding="utf-8") as f:
        return json.load(f)


def mentes(adatok):
    """Mentés a JSON fájlba szépen formázva."""
    with open(FAJLNEV, "w", encoding="utf-8") as f:
        json.dump(adatok, f, ensure_ascii=False, indent=4)
    print("Adatok sikeresen elmentve!\n")


# --- Funkciók ---

def listaz_konyvek(adatok):
    print("\nKönyvek listája:")
    for k in adatok["konyvek"]:
        status = "Elérhető" if k["elerheto"] else "Kölcsönözve"
        print(f"[{k['id']}] {k['cim']} - {k['szerzo']} ({k['ev']}) - {k['ar']} Ft - {status}")
    print()


def keres_konyv(adatok):
    kulcsszo = input("Adj meg egy kulcsszót (cím vagy szerző): ").lower()
    talalatok = [
        k for k in adatok["konyvek"]
        if kulcsszo in k["cim"].lower() or kulcsszo in k["szerzo"].lower()
    ]
    if talalatok:
        for k in talalatok:
            print(f"- {k['cim']} ({k['szerzo']}, {k['ev']})")
    else:
        print("Nincs találat.")
    print()


def uj_konyv(adatok):
    uj_id = max([k["id"] for k in adatok["konyvek"]], default=0) + 1
    cim = input("Cím: ")
    szerzo = input("Szerző: ")
    ev = int(input("Kiadás éve: "))
    ar = int(input("Ár (Ft): "))
    kategoriak = input("Kategóriák (vesszővel elválasztva): ").split(",")
    kategoriak = [k.strip() for k in kategoriak]

    uj = {
        "id": uj_id,
        "cim": cim,
        "szerzo": szerzo,
        "ev": ev,
        "ar": ar,
        "kategoriak": kategoriak,
        "elerheto": True
    }
    adatok["konyvek"].append(uj)
    print(f"'{cim}' hozzáadva a könyvtárhoz.\n")


def modosit_ar(adatok):
    cim = input("Melyik könyv árát szeretnéd módosítani? ")
    for k in adatok["konyvek"]:
        if k["cim"].lower() == cim.lower():
            uj_ar = int(input(f"Új ár ({k['ar']} helyett): "))
            k["ar"] = uj_ar
            print("Ár frissítve!\n")
            return
    print("Nincs ilyen könyv.\n")


def uj_tag(adatok):
    uj_id = max([t["id"] for t in adatok["tagok"]], default=0) + 1
    nev = input("Tag neve: ")
    email = input("E-mail: ")
    adatok["tagok"].append({"id": uj_id, "nev": nev, "email": email, "kolcsonzesek": []})
    print(f"'{nev}' hozzáadva a tagokhoz.\n")


def kolcsonzes(adatok):
    nev = input("Tag neve: ")
    cim = input("Könyv címe: ")
    tag = next((t for t in adatok["tagok"] if t["nev"].lower() == nev.lower()), None)
    konyv = next((k for k in adatok["konyvek"] if k["cim"].lower() == cim.lower()), None)

    if not tag:
        print("Nincs ilyen tag.")
        return
    if not konyv:
        print("Nincs ilyen könyv.")
        return
    if not konyv["elerheto"]:
        print("A könyv már ki van kölcsönözve.")
        return

    konyv["elerheto"] = False
    tag["kolcsonzesek"].append(konyv["id"])
    print(f"'{konyv['cim']}' kölcsönözve {tag['nev']} számára.\n")


def visszahozas(adatok):
    nev = input("Tag neve: ")
    cim = input("Könyv címe: ")
    tag = next((t for t in adatok["tagok"] if t["nev"].lower() == nev.lower()), None)
    konyv = next((k for k in adatok["konyvek"] if k["cim"].lower() == cim.lower()), None)

    if not tag or not konyv:
        print("Nincs ilyen tag vagy könyv.")
        return
    if konyv["id"] not in tag["kolcsonzesek"]:
        print("Ez a könyv nincs ennél a tagnál.")
        return

    tag["kolcsonzesek"].remove(konyv["id"])
    konyv["elerheto"] = True
    print(f"'{konyv['cim']}' visszahozva {tag['nev']} által.\n")


def atlagar(adatok):
    kat = input("Add meg a kategóriát: ").lower()
    konyvek = [k for k in adatok["konyvek"] if any(kat == c.lower() for c in k["kategoriak"])]
    if not konyvek:
        print("Nincs ilyen kategóriájú könyv.\n")
        return
    atlag = sum(k["ar"] for k in konyvek) / len(konyvek)
    print(f"Átlagár a '{kat}' kategóriában: {int(atlag)} Ft\n")


def torol_regi(adatok):
    evhatar = int(input("Melyik évnél régebbieket töröljem? "))
    eredeti_db = len(adatok["konyvek"])
    adatok["konyvek"] = [k for k in adatok["konyvek"] if k["ev"] >= evhatar]
    torolve = eredeti_db - len(adatok["konyvek"])
    print(f"{torolve} könyv törölve.\n")