class Vasarlas:
    def __init__(self, rekesz, darab, penz=None):
        if penz is None:
            penz = []
        self.rekesz = rekesz
        self.penz = penz
        self.darab = darab

    def bedobott_penz(self):
        cimletek = [100, 50, 20, 10, 5, 2, 1]
        osszeg = 0
        for i in range(7):
            osszeg += self.penz[-i - 1] * cimletek[i]
        return osszeg


class Csoki:
    def __init__(self, rekesz=0, darab=0, ar=0):
        self.rekesz = rekesz
        self.darab = darab
        self.ar = ar


class Fajl:
    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        f = open(self.fnev)
        db = f.readline()
        adatok = []
        for sor in f.readlines():
            egysor = sor.split()
            e = []
            for adat in egysor:
                e.append(int(adat))
            adatok.append(e)
        f.close()
        return adatok

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w', encoding='utf-8')
        print(adatok, end='', file=f)
        f.close()


class Rekeszek:

    def __init__(self):
        fajl = Fajl('csoki.txt')
        adatok = fajl.beolvas()
        rekeszek = []
        for rekesz in adatok:
            rekeszek.append(Csoki(*rekesz))
        self.rekeszek = rekeszek

    def csokiertek(self):
        """az automataban levo csokik osszerteke"""
        return sum(csoki.darab * csoki.ar for csoki in self.rekeszek)

    def annarekeszek(self, penz):
        """azok a rekeszek, amibol anna valaszhat"""
        return [str(csoki.rekesz) for csoki in self.rekeszek if csoki.darab > 6 and csoki.ar * 7 <= penz]

    def annarekeszek_kiir(self, penz):
        """azok a rekeszek, amibol anna valaszhat kiir"""
        return ' '.join(self.annarekeszek(penz))

    def egyrekesz(self, sorszam):
        """egy rekesz sorszama alapjan"""
        for csoki in self.rekeszek:
            if csoki.rekesz == sorszam:
                return csoki

    def egyrekesz_kiir(self, sorszam, darab):
        """vasarlaskor szukseges cimletek kiirasa"""
        egyseg = self.egyrekesz(sorszam).ar
        sz = str(darab) + ' darab csoki, ' + str(egyseg) + ' egységáron ' + str(egyseg * darab) + ' forint értékben.\n'
        sz += 'Címletek:\n'
        cimletek = [100, 50, 20, 10, 5, 2, 1]
        osszeg = egyseg * darab
        for i in range(len(cimletek)):
            cimletdb = osszeg // cimletek[i]
            maradek = osszeg % cimletek[i]
            osszeg = maradek
            if cimletdb != 0:
                sz += str(cimletek[i]) + ' ' + str(cimletdb) + '\n'
            if maradek == 0:
                break
        return sz


class Vasarlasok:
    def __init__(self):
        fajl = Fajl('vasarlas.txt')
        adatok = fajl.beolvas()
        vasarlasok = []
        for vasarlas in adatok:
            vasarlasok.append(Vasarlas(vasarlas[0], vasarlas[1], vasarlas[2:]))
        self.vasarlasok = vasarlasok

    def rekeszsorszamok(self):
        """azoknak a rekeszeknek a sorszama, amelybol vasarolni akartak"""
        return sorted(set(str(vasar.rekesz) for vasar in self.vasarlasok), key=lambda x: int(x))

    def sorszamok_kiir(self):
        """azoknak a rekeszeknek a sorszama, amelybol vasarolni akartak kiirasa"""
        return ' '.join(self.rekeszsorszamok())

    def vasarlas7(self):
        """7es rekeszbol torteno vasarlas"""
        rekeszek = Rekeszek()
        rekesz7 = rekeszek.egyrekesz(7)
        db7 = rekesz7.darab
        ar7 = rekesz7.ar
        vasarlasok7 = []
        for index, vasarlas in enumerate(self.vasarlasok):
            if vasarlas.rekesz == 7:
                vasarlasok7.append([index + 1, vasarlas])
        sz = ''
        for ssz, vasarlas in vasarlasok7:
            # ha a rekeszben elég a csoki mennyisége és elegendő a pénz
            if vasarlas.bedobott_penz() >= vasarlas.darab * ar7 and vasarlas.darab <= db7:
                sz += str(ssz) + '\t' + str(vasarlas.darab) + '\n'
                db7 -= vasarlas.darab
            elif vasarlas.bedobott_penz() >= vasarlas.darab * ar7 and vasarlas.darab > db7:
                sz += str(ssz) + '\tNincs elég csoki a rekeszben\n'
            elif vasarlas.bedobott_penz() < vasarlas.darab * ar7 and vasarlas.darab <= db7:
                sz += str(ssz) + '\tKevés a bedobott pénz\n'
            else:
                sz += str(ssz) + '\tKevés a bedobott pénz és nincs elég csoki\n'
        return sz


# 2. feladat
rekeszek = Rekeszek()
print("2. feladat\nAz automatában", rekeszek.csokiertek(), "fabatka értékű csokoládé van.")

# 3. feladat
vasarlasok = Vasarlasok()
print("3. feladat\nRekeszek, amelyekből vásárolni akartak:", vasarlasok.sorszamok_kiir())

# 4. feladat
osszeg = int(input("4. feladat Kérem a pénzösszeget! "))
print("4. feladat\nRekszek, amiből Anna Választhat: ", rekeszek.annarekeszek_kiir(osszeg))

# 5. feladat
rekesz = int(input("5. feladat:\nAdd meg a rekesz sorszámát: "))
darabszam = int(input("Add meg a darabszámot "))
print(rekeszek.egyrekesz_kiir(rekesz, darabszam))

# 6. feladat
print("6. feladat: fájlbaírás")
fajl = Fajl('rekesz7OOP.txt')
fajl.kiir(vasarlasok.vasarlas7())
