def beolvasas(fajlnev):
    with open(fajlnev, encoding='utf-8') as f:
        sorok = [sor.strip().split(';') for sor in f]
        adatok = [
            {
                'ev': int(s[0]),
                'negyedev': int(s[1]),
                'eredet': s[2],
                'leiras': s[3],
                'peldanyszam': int(s[4])
            }
            for s in sorok
        ]
    return adatok


def szerzo_keres(adatok):
    print("2. feladat:")
    szerzo = input("Szerző: ")
    db = sum(1 for adat in adatok if szerzo in adat['leiras'])
    if db == 0:
        print("Nem adtak ki")
    else:
        print(f"{db} könyvkiadás")


def legnagyobb_peldanyszam(adatok):
    print("3. feladat:")
    max_peldany = max(adat['peldanyszam'] for adat in adatok)
    db = sum(1 for adat in adatok if adat['peldanyszam'] == max_peldany)
    print(f"Legnagyobb példányszám: {max_peldany}, előfordult {db} alkalommal")


def elso_40000_kulfoldi(adatok):
    print("4. feladat:")
    for adat in adatok:
        if adat['eredet'] == 'kf' and adat['peldanyszam'] >= 40000:
            print(f"{adat['ev']}/{adat['negyedev']}. {adat['leiras']}")
            break


def statisztika(adatok):
    print("5. feladat:")
    stat = {}
    for adat in adatok:
        ev = adat['ev']
        if ev not in stat:
            stat[ev] = {'ma': {'db': 0, 'osszeg': 0}, 'kf': {'db': 0, 'osszeg': 0}}
        stat[ev][adat['eredet']]['db'] += 1
        stat[ev][adat['eredet']]['osszeg'] += adat['peldanyszam']

    print("Év\tMagyar kiadás\tMagyar példányszám\tKülföldi kiadás\tKülföldi példányszám")
    for ev in sorted(stat):
        sor = stat[ev]
        print(f"{ev}\t{str(sor['ma']['db']).rjust(5)}\t\t{str(sor['ma']['osszeg']).rjust(10)}\t\t{str(sor['kf']['db']).rjust(5)}\t\t{str(sor['kf']['osszeg']).rjust(10)}")

    with open("tabla.html", "w", encoding="utf-8") as f:
        f.write("<table>\n")
        f.write("<tr><th>Év</th><th>Magyar kiadás</th><th>Magyar példányszám</th><th>Külföldi kiadás</th><th>Külföldi példányszám</th></tr>\n")
        for ev in sorted(stat):
            sor = stat[ev]
            f.write(f"<tr><td>{ev}</td><td>{sor['ma']['db']}</td><td>{sor['ma']['osszeg']}</td><td>{sor['kf']['db']}</td><td>{sor['kf']['osszeg']}</td></tr>\n")
        f.write("</table>\n")


def ujra_kiadott(adatok):
    print("6. feladat:")
    print("Legalább kétszer, nagyobb példányszámban újra kiadott könyvek:")
    konyvek = {}
    for adat in adatok:
        leiras = adat['leiras']
        if leiras not in konyvek:
            konyvek[leiras] = []
        konyvek[leiras].append(adat['peldanyszam'])

    for leiras, peldanyok in konyvek.items():
        # peldanyok.sort()
        elso = peldanyok[0]
        nagyobbak = [p for p in peldanyok[1:] if p > elso]
        if len(nagyobbak) >= 2:
            print(leiras)


def main():
    adatok = beolvasas("kiadas.txt")  # vagy "kiadas2.txt"
    szerzo_keres(adatok)
    legnagyobb_peldanyszam(adatok)
    elso_40000_kulfoldi(adatok)
    statisztika(adatok)
    ujra_kiadott(adatok)


if __name__ == "__main__":
    main()