class Ido:
    def __init__(self, ora, perc):
        osszperc = ora * 60 + perc
        self.ora = osszperc // 60
        self.perc = osszperc % 60

    def percbe(self) -> int:
        return self.ora * 60 + self.perc

    def __str__(self):
        return '{:02d}:{:02d}'.format(self.ora, self.perc)

    def __eq__(self, other):
        return [False, True][self.percbe() == other.percbe()]

    def __gt__(self, other):
        return [False, True][self.percbe() > other.percbe()]

    def __add__(self, other):
        return Ido(0, self.percbe() + other.percbe())


class Foglalas:
    def __init__(self, nev, idopont, fido):
        self.nev = nev
        self.idopont = idopont
        self.fido = fido


class Foglalasok:
    def __init__(self, foglalasok=None):
        if foglalasok is None:
            foglalasok = []
        self.foglalasok = foglalasok
        self.darab = len(self.foglalasok)

    def foglalalasok_szama(self, nev) -> int:
        """egy nevhez tartozo foglalasok szama"""
        return sum(1 for foglalas in self.foglalasok if foglalas.nev == nev)

    def foglalalasok_szama_kiir(self, nev) -> str:
        """egy nevhez tartozo foglalasok szama kiir"""
        return ['A megadott néven nincs foglalás.',
                nev + ' néven ' + str(self.foglalalasok_szama(nev)) + ' foglalás van.'][
            self.foglalalasok_szama(nev) > 0]

    def foglaltak(self, idopont) -> list:
        """egy adott idopontban foglaltak"""
        return [foglalas for foglalas in self.foglalasok if foglalas.idopont == idopont]

    def foglaltak_kiir(self, idopont) -> str:
        """egy adott idopontban foglaltak"""
        sz = ''
        for foglalalas in self.foglaltak(idopont):
            sz += foglalalas.nev + '\n'
        return sz

    def legkorabbi(self) -> Foglalas:
        """legkorabbi foglalashoz tartozo foglalas"""
        return min(self.foglalasok, key=lambda x: x.fido)

    def legkorabbi_kiir(self) -> str:
        """legkorabbi foglalashoz tartozo foglalas kiir"""
        legkorabb = self.legkorabbi()
        sz = 'Tanár neve: ' + legkorabb.nev + '\n'
        sz += 'Foglalt időpont: ' + str(legkorabb.idopont) + '\n'
        sz += 'Foglalás ideje: ' + legkorabb.fido
        return sz

    def foglalt_idopontok(self, nev):
        """egy nevhez tartozo foglalt idopontok"""
        return sorted([foglalas.idopont for foglalas in self.foglalasok if foglalas.nev == nev],
                      key=lambda x: x.percbe())

    def utolso_foglalt_idopont(self, nev):
        """egy nevhez tartozo utolso foglalt idopont"""
        return self.foglalt_idopontok(nev)[-1]

    def legkorabbi_tavozas(self, nev):
        """egy nevhez tartozo legkoranni tavozas idopontja"""
        return self.utolso_foglalt_idopont(nev) + Ido(0, 10)  # utolsó foglalt időpont + 10 perc

    def szabad_idopontok(self, nev):
        """egy nevhez tartozo szabad idopontok"""
        # lehetseges idopontok
        elso = Ido(16, 0)
        idok = []
        for i in range(12):
            ujido = elso + Ido(0, 10 * i)
            idok.append(ujido)
        szabad = []
        for ido in idok:
            if ido not in self.foglalt_idopontok(nev):
                szabad.append(ido)
        return szabad

    def szabad_idopontok_kiir(self, nev):
        """egy nevhez tartozo szabad idopontok"""
        sz = ''
        for ido in self.szabad_idopontok(nev):
            sz += str(ido) + '\n'
        return sz


class Fajl:
    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        f = open(self.fnev, encoding='utf-8')
        foglalasok = []
        for sor in f.readlines():
            vnev, knev, ido, foglalas_ideje = sor.strip().split()
            nev = vnev + " " + knev
            ora, perc = ido.split(":")
            foglalasok.append(Foglalas(nev, Ido(int(ora), int(perc)), foglalas_ideje))

        f.close()
        return foglalasok

    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('fogado.txt')
foglal = fajl.beolvas()
foglalasok = Foglalasok(foglal)

# 2. feladat
print("2. feladat\nFoglalások száma:", foglalasok.darab)

# 3. feladat
tanar = input("3. feladat:\nAdjon meg egy nevet: ")
print(foglalasok.foglalalasok_szama_kiir(tanar))

# 4. feladat
ervenyes_ido = input("4. feladat:\nAdjon meg egy érvényes időpontot (pl. 17:10): ")
ora, perc = int(ervenyes_ido[:2]), int(ervenyes_ido[3:])
print(foglalasok.foglaltak_kiir(Ido(ora, perc)))
fajlnev = ervenyes_ido.replace(":", "")
fajl = Fajl(fajlnev + 'OOP.txt')
fajl.kiir(foglalasok.foglaltak_kiir(Ido(ora, perc)))

# 5. feladat
print("5. feladat\n", foglalasok.legkorabbi_kiir(), sep='')

# 6. feladat
print("6. feladat")
print(foglalasok.szabad_idopontok_kiir('Barna Eszter'))
print("Barna Eszter legkorábban távozhat:", foglalasok.legkorabbi_tavozas('Barna Eszter'))
