class Epizod:
    """Epizod osztalya"""
    def __init__(self, datum, cim, resz, hossz, latta):
        self.datum = datum
        self.cim = cim
        self.resz = resz
        self.hossz = hossz
        self.latta = latta


class Adas:
    """Adas - Az epizodokat reprezentalo osztaly"""
    def __init__(self, epizodok=None):
        if epizodok is None:
            epizodok = []
        filmek = []
        for d, c, r, h, l in epizodok:
            filmek.append(Epizod(d, c, r, int(h), int(l)))
        self.epizodok = filmek

    def van_vetitesi_ido(self):
        """vetitesi idovel rendelkezo filmek"""
        return sum(1 for film in self.epizodok if film.datum != 'NI')

    def osszes_epizod_db(self):
        """osszes epizod szama"""
        return len(self.epizodok)

    def latta_db(self):
        """latott epizodok szama"""
        return sum(1 for film in self.epizodok if film.latta == 1)

    def osszido(self):
        """latott epizodok osszes ideje"""
        return sum(film.hossz for film in self.epizodok if film.latta == 1)

    def nem_latta(self, ido):
        """egy megadott datumig nem latott filmek"""
        return [film for film in self.epizodok if film.datum <= ido and film.latta == 0]

    def nem_latta_kiir(self, ido):
        """egy megadott datumig nem latott filmek stringbe"""
        sz = ''
        epizodok = self.nem_latta(ido)
        for film in epizodok:
            sz += film.resz + '\t' + film.cim + '\n'
        return sz

    def egy_nap_filmjei(self, nap):
        """egy adott napon vetitett filmek"""
        ido = Ido()
        return set([film.cim for film in self.epizodok if
                film.datum != 'NI' and ido.hetnapja(int(film.datum[:4]), int(film.datum[5:7]),
                                                    int(film.datum[8:])) == nap])

    def egy_nap_filmjei_kiir(self, nap):
        """egy adott napon vetitett filmek stringbe"""
        sz = ''
        filmek = self.egy_nap_filmjei(nap)
        for film in filmek:
            sz += film + '\n'
        if len(sz):
            return sz
        else:
            return 'Az adott napon nem kerül adásba sorozat.'

    def vetitesi_idok(self):
        """vetitesi idok sorozatonkent"""
        stat_hossz = {}
        stat_db = {}
        for film in self.epizodok:
            stat_hossz[film.cim] = stat_hossz.get(film.cim, 0) + film.hossz
            stat_db[film.cim] = stat_db.get(film.cim, 0) + 1
        return stat_hossz, stat_db

    def vetitesi_idok_kiir(self):
        """vetitesi idok sorozatonkent stringbe"""
        sz = ''
        vetit_ido = self.vetitesi_idok()
        for cim in vetit_ido[0]:
            sz += cim + ' ' + str(vetit_ido[0][cim]) + ' ' + str(vetit_ido[1][cim]) + '\n'
        return sz


class Fajl:
    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        # szotar kulcs a sorozat cime, ertekei az epizodokat tartalmazo lista
        f = open(self.fnev)
        i = 0
        filmek = []
        for sor in f.readlines():
            if i % 5 == 0:
                filmek.append([sor.strip()])
            else:
                filmek[-1].append(sor.strip())
            i += 1
        f.close()
        return filmek

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w')
        print(adatok, end='', file=f)
        f.close()


class Ido:
    def __init__(self, perc=0):
        self.nap = perc // 1440
        self.ora = (perc % 1440) // 60
        self.perc = perc % 60

    def __str__(self):
        return str(self.nap) + ' nap ' + str(self.ora) + ' ora ' + str(self.perc) + ' perc'

    def hetnapja(self, ev, ho, nap):
        ev4 = ev // 4
        ev100 = ev // 100
        ev400 = ev // 400
        napok = ["v", "h", "k", "sze", "cs", "p", "szo"]
        honapok = [0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]
        if ho < 3:
            ev = ev - 1
        return napok[(ev + ev4 - ev100 + ev400 + honapok[ho - 1] + nap) % 7]


# 1. feladat
f = Fajl('lista.txt')
filmek = f.beolvas()
adas = Adas(filmek)

# 2. feladat
print("2. feladat\nA listában", adas.van_vetitesi_ido(), "db vetítési dátummal rendelkező epizód van.")

# 3. feladat
print("3. feladat\nA listában lévő epizódok {:.2f} %-át látta.".format(adas.latta_db() * 100 / adas.osszes_epizod_db()))

# 4. feladat
print("4. feladat\nSorozatnézéssel töltött idő:", Ido(adas.osszido()))

# 5. feladat
idopont = input("5. feladat\nAdjon meg egy dátumot! Dátum: ")
print("Amiket még nem látott:")
print(adas.nem_latta_kiir(idopont))

# 7. feladat
egynap = input("7. feladat\nAdja meg a hét egy napját (például cs)! Nap= ")
print(adas.egy_nap_filmjei_kiir(egynap))

# 8. feladat
print("8. feladat\nFájlba írása a vetítési időknek")
f = Fajl('osszegOOP.txt')
f.kiir(adas.vetitesi_idok_kiir())
print("Kész")
