class Vasarlas:
    """egy vasarlast reprezentalo osztaly"""

    def __init__(self, kosar=None):
        if kosar is None:
            kosar = []
        self.kosar = kosar

    def kosar_tartalma(self):
        """kosar tartama termek: darabszam"""
        k = {}
        for termek in self.kosar:
            k[termek] = k.get(termek, 0) + 1
        return k

    def __str__(self):
        sz = ''
        for termek in self.kosar_tartalma():
            kosar = self.kosar_tartalma()
            sz += termek + ' ' + str(kosar[termek]) + '\n'
        return sz

    def termek_db(self):
        """a kosarban levo termekek szama"""
        return len(self.kosar)

    def ertek(self, db):
        """darabszam utan fizetendo"""
        if db == 1:
            return 500
        elif db == 2:
            return 500 + 450
        else:
            return 500 + 450 + (db - 2) * 400

    def termekek(self):
        """a kosarba rakott egyedi termekek"""
        return set(self.kosar)

    def szamla(self):
        """a kosar tartalma utan fizetendo"""
        return sum([self.ertek(self.kosar.count(termek)) for termek in self.termekek()])


class Fajl:
    """fajl muveleteket megvalosito osztaly"""

    def __init__(self, f):
        self.fajl = f

    def beolvas(self):
        adatok = []
        be = open(self.fajl)
        for sor in be.read().split('F\n'):
            if sor != '':
                adatok.append(sor.strip().split('\n'))
        be.close()
        return adatok

    def kiir(self, adatok):
        ki = open(self.fajl, 'w')
        print(adatok, file=ki)
        ki.close()
        pass


class Uzlet:
    """a teljes vasarlasokat reprezentalo osztaly"""

    def __init__(self, vasarlasok):
        self.vasarlasok = [Vasarlas(kosar) for kosar in vasarlasok]

    def vasarlas_db(self):
        """vasarlasok szama"""
        return len(self.vasarlasok)

    def egyvasarlas(self, sz):
        """egy adott sorszamu vasarlas"""
        return self.vasarlasok[sz - 1]

    def vasarlas_sorszam(self, aru):
        """egy adott arubol hanyadik vasarlo vett"""
        return [sz + 1 for sz, vasarlas in enumerate(self.vasarlasok) if aru in vasarlas.kosar]


    def vasarlas_szam(self, aru):
        """egy adott arubol hany alkalommal vasaroltak"""
        return len(self.vasarlas_sorszam(aru))

    def szamlak(self):
        """a vasralasok utani osszes szamla"""
        return [vasarlas.szamla() for vasarlas in self.vasarlasok]

    def szamlak_kiir(self):
        """osszes szamla megjelenitese"""
        sz = ''
        for index, szamla in enumerate(self.szamlak()):
            sz += str(index + 1) + ': ' + str(szamla) + '\n'
        return sz


# 1. feladat
f = Fajl('penztar.txt')
adatok = f.beolvas()

# 2. feladat
uzlet = Uzlet(adatok)
print("2. feladat\nA fizetések száma:", uzlet.vasarlas_db())

# 3. feladat
print("3. feladat\nAz első vásárló", uzlet.egyvasarlas(1).termek_db(), "terméket vásárolt.")

# 4. feladat
ssz = int(input("4. feladat\nAdja meg a vásárlás sorszámát: "))
cikk = input("Adja meg az árucikk nevét: ")
db = int(input("Adja meg a darabszámot: "))

# 5. feladat
print("5. feladat\nAz első vásárlás sorszáma:", uzlet.vasarlas_sorszam(cikk)[0],
      "Az utolsó vásárlás sorszáma:", uzlet.vasarlas_sorszam(cikk)[-1])
print(uzlet.vasarlas_szam(cikk), "vásárlás során vettek belőle.")

# 6. feladat
print("6. feladat\n", db, " darab vételekor fizetendő: ", Vasarlas().ertek(2), sep='')

# 7. feladat
vasarlas = Vasarlas(uzlet.vasarlasok[ssz - 1].kosar)  # az vásárlások közül kiválasztva a megfelelőt
print(vasarlas)

# 8. feladat
f = Fajl('osszegOOP.txt')
f.kiir(uzlet.szamlak_kiir())
