import random


class Feladat:
    def __init__(self, kerdes='', valasz=0, pont=0, tema=''):
        self.kerdes = kerdes
        self.valasz = valasz
        self.pont = pont
        self.tema = tema


class Feladatok:
    def __init__(self, kerdesek=None):
        if kerdesek is None:
            kerdesek = []
        self.kerdesek = kerdesek
        self.darab = len(kerdesek)

    def matematika(self) -> dict:
        """matematika feladat pontjai"""
        pontok = {}
        for kerdes in self.kerdesek:
            if kerdes.tema == 'matematika':
                pontok[str(kerdes.pont)] = pontok.get(str(kerdes.pont), 0) + 1
        return pontok

    def matematika_kiir(self) -> str:
        """matematika feladat pontjai kiir"""
        stat = []  # a formázott kiiráshoz
        sz = 'Az adatfájlban ' + str(sum(self.matematika().values())) + ' darab matematika feladat van, '
        for pont, darab in self.matematika().items():
            stat.append(str(pont) + ' pontot ér ' + str(darab) + ' feladat')
        return sz + ', '.join(stat) + '.'

    def tolig(self) -> dict:
        """a valaszok szamerteke"""
        return {'minimum': min(kerdes.valasz for kerdes in self.kerdesek),
                'maximum': max(kerdes.valasz for kerdes in self.kerdesek)}

    def temakorok(self) -> set:
        """temakorok"""
        tema = set()
        for kerdes in self.kerdesek:
            tema.add(kerdes.tema)
        return tema

    def temakorok_kiir(self) -> str:
        """temakorok kiir"""
        return ', '.join(sorted(self.temakorok()))

    def veletlen_kerdes(self, tema) -> Feladat:
        """temaornek megfelelo kerdes"""
        kerdesek = [kerdes for kerdes in self.kerdesek if kerdes.tema == tema]
        return random.choice(kerdesek)

    def veletlen_kerdes_kiir(self, tema) -> str:
        """temaornek megfelelo kerdes"""
        feladat = feladatok.veletlen_kerdes(tema)
        valasz = int(input("{}: ".format(feladat.kerdes)))
        return ["A feladat 0 pontot ér.\nA helyes válasz: " + str(feladat.valasz),
                "A feladat " + str(feladat.pont) + " pontot ér."][
            feladat.valasz == valasz]

    def veletlen_kerdesek(self) -> set:
        """10 darab veletlen kerdes"""
        kerdesek = set()
        while len(kerdesek) != 10:
            kerdesek.add(random.choice(self.kerdesek))
        return kerdesek

    def veletlen_kerdesek_kiir(self) -> str:
        """10 darab veletlen kerdes kiir"""
        sz = ''
        ossz = 0
        for kerdes in self.veletlen_kerdesek():
            sz += str(kerdes.pont) + ' ' + str(kerdes.valasz) + ' ' + kerdes.kerdes + '\n'
            ossz += kerdes.pont
        sz += 'A feladatsorra összesen ' + str(ossz) + ' pont adható.'
        return sz


class Fajl:
    """Fajlmuveletek osztalya"""

    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        feladatok = []
        f = open(self.fnev, encoding='utf-8')
        i = 0
        for sor in f.readlines():
            if i % 2 == 0:
                feladatok.append(Feladat(sor.strip()))
            else:
                valasz, pont, tema = sor.split()
                feladatok[-1].valasz = int(valasz)
                feladatok[-1].pont = int(pont)
                feladatok[-1].tema = tema
            i += 1
        f.close()
        return feladatok

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w', encoding='utf-8')
        print(adatok, end='', file=f)
        f.close()


# 1. feladat
fajl = Fajl('felszam.txt')
feladatok = Feladatok(fajl.beolvas())

# 2. feladat
print("2. feladat\nA fájlban", feladatok.darab, "kérdés van.")

# 3. feladat
print("3. feladat\n", feladatok.matematika_kiir(), sep='')

# 4. feladat
print("4. feladat\nA válaszok számértéke", feladatok.tolig()['minimum'], "és", feladatok.tolig()['maximum'],
      "között van.")

# 5. feladat
print("5. feladat\nTémakörök:", feladatok.temakorok_kiir())

# 6. feladat
temakor = input("6. feladat\nMilyen témakörből szeretne kérdést kapni? ")
print(feladatok.veletlen_kerdes_kiir(temakor))

# 7. feladat
fajl = Fajl('tesztfelOOP.txt')
fajl.kiir(feladatok.veletlen_kerdesek_kiir())
print("7. feladat\nFájlbaírás kész.")
