class Sms:
    """Sms osztály"""

    def __init__(self, x=None):
        if x is None:
            x = []
        self.ora = int(x[0])
        self.perc = int(x[1])
        self.szam = x[2]
        self.uzenet = x[3]
        self.hossz = len(self.uzenet)

    def __str__(self):
        """sms kiírása: óra perc szám üzenet"""
        return str(self.ora) + ' ' + str(self.perc) + ' ' + self.szam + ' ' + self.uzenet

    def percbe(self):
        """üzenet idejét percbe"""
        return self.ora * 60 + self.perc


class Ido:
    def __init__(self, o=0, p=0):
        osszperc = o * 60 + p
        self.ora = osszperc // 60
        self.perc = osszperc % 60

    def __str__(self):
        return str(self.ora) + ' óra ' + str(self.perc) + ' perc'

    def kiir(self):
        return str(self.ora) + ':' + str(self.perc)

    def percbe(self):
        """üzenet idejét percbe"""
        return self.ora * 60 + self.perc

    def __sub__(self, other):
        """két idő kölönbségét adja, (- operátor)"""
        kul = self.percbe() - other.percbe()
        return Ido(0, kul)

    def __gt__(self, other):
        """két időt hasonlít össze (> operátor)"""
        return self.percbe() > other.percbe()


memoria = 10
baratnoszam = '123456789'
uzenetek = []

be = open('sms.txt')
db = be.readline()
i = 0
for sor in be.readlines():
    if i % 2 == 0:
        uzenetek.append(sor.split())
    else:
        uzenetek[-1].append(sor.strip())
    i += 1
be.close()

# 2. feladat
sms = Sms(uzenetek[min(memoria, len(uzenetek)) - 1])
print("2. feladat\nA memóriában tárolt utolsó üzenet:", sms.uzenet)

# 3. feladat
leghosszabb = [Sms(sms) for sms in uzenetek if Sms(sms).hossz == max(Sms(sms).hossz for sms in uzenetek)]
legrovidebb = [Sms(sms) for sms in uzenetek if Sms(sms).hossz == min(Sms(sms).hossz for sms in uzenetek)]
print("3. feladat\nA leghosszabb üzenet:", *leghosszabb, "\nA legrövidebb üzenet:", *legrovidebb)

# 4. feladat
stat = [0] * 5
hosszak = ['1-20', '21-40', '41-60', '61-80', '81-100']
print("4. feladat\nStatisztika")
for uzenet in uzenetek:
    stat[(Sms(uzenet).hossz - 1) // 20] += 1
for index, db in enumerate(stat):
    print(hosszak[index], "-", db, "db")

# 5. feladat
print("5. feladat")
orak = [0] * 24
for uzenet in uzenetek:
    orak[Sms(uzenet).ora] += 1
lekerendo = 0
for db in orak:
    if db > memoria:
        lekerendo += db - memoria
print("A lekérendő üzenetek száma:", lekerendo)

# 6. feladat

legtobb = Ido()
baratno_hivasok = [Sms(sms) for sms in uzenetek if Sms(sms).szam == baratnoszam]
if len(baratno_hivasok) > 1:
    elozo = baratno_hivasok[0]
    for hivas in baratno_hivasok:
        if Ido(hivas.ora, hivas.perc) - Ido(elozo.ora, elozo.perc) > Ido(0, legtobb.percbe()):
            legtobb = Ido(hivas.ora, hivas.perc) - Ido(elozo.ora, elozo.perc)
        elozo = hivas
    print("A két beszélgetés között eltelt leghosszabb idő:", legtobb)
else:
    print("Nincs elég adat.")

print("7. feladat:\nAdja meg az üzenet adatait!")
ora = int(input("óra: "))
perc = int(input("perc: "))
telszam = input("telefonszám: ")
szoveg = input("szöveg: ")
uzenetek.append([ora, perc, telszam, szoveg])

# 8. feladat
print("8. feladat: fájlbaírás")
ki = open("smskiOPP.txt", "w", encoding='utf-8')
telefonszamok = set(x[2] for x in uzenetek)
telefonszamok = sorted(telefonszamok, key=lambda y: int(y))
for telszam in telefonszamok:
    adatok = [Sms(uzenet) for uzenet in uzenetek if Sms(uzenet).szam == telszam]
    print(telszam, file=ki)
    for s in adatok:
        print(Ido(s.ora, s.perc).kiir(), s.uzenet, file=ki)
ki.close()
