class Tavirat:
    def __init__(self, tel, ido, szel, ho):
        self.tel = tel
        self.ora = ido[:2]
        self.perc = ido[2:]
        self.szel = szel
        self.ho = int(ho)

    def szelcsend(self):
        """szelcsend van-e"""
        if self.szel == '00000':
            return True
        else:
            return False


class Jelentes:
    def __init__(self, taviratok=None):
        if taviratok is None:
            taviratok = []
        self.taviratok = taviratok
        self.telepulesek = sorted(set([t.tel for t in self.taviratok]))

    def tavirat_varosbol(self, varos):
        """egy adott varosbol erkezo taviratok"""
        return [tav for tav in self.taviratok if tav.tel == varos]

    def utolso_tavirat_varosbol(self, varos):
        """egy adott varosbol erkezo utolso tavirat"""
        return self.tavirat_varosbol(varos)[-1]

    def utolso_tavirat_varosbol_kiir(self, varos):
        """egy adott varosbol erkezo utolso tavirat ideje kiir"""
        utolso = self.utolso_tavirat_varosbol(varos)
        return utolso.ora + ':' + utolso.perc

    def legnagyobb_homerseklet(self):
        """legnagyobb homerseklethez tartoto taviratok"""
        return [tav for tav in self.taviratok if tav.ho == max(tav.ho for tav in self.taviratok)]

    def legkisebb_homerseklet(self):
        """legkisebb homerseklethez tartoto taviratok"""
        return [tav for tav in self.taviratok if tav.ho == min(tav.ho for tav in self.taviratok)]

    def min_max_ho_kiir(self):
        """legkisebb, legnagyobb homerseklethez tartozo adatok kiir"""
        sz = 'A legalacsonyabb hőmérséklet:\n'
        legk, legn = self.legkisebb_homerseklet(), self.legnagyobb_homerseklet()
        for tav in legk:
            sz += tav.tel + ' ' + tav.ora + ':' + tav.perc + ' ' + str(tav.ho) + ' fok\n'
        sz += 'A legmagasabb hőmérséklet:\n'
        for tav in legn:
            sz += tav.tel + ' ' + tav.ora + ':' + tav.perc + ' ' + str(tav.ho) + ' fok\n'
        return sz

    def szelcsend_taviratok(self):
        """szelcsendes taviratok"""
        return [tav for tav in self.taviratok if tav.szelcsend()]

    def szelcsend_taviratok_kiir(self):
        """szelcsendes taviratok kiir"""
        tavok = self.szelcsend_taviratok()
        sz = ''
        if not len(tavok):
            sz = 'Nem volt szélcsend a mérések idején.'
        else:
            for tav in tavok:
                sz += tav.tel + ' ' + tav.ora + ':' + tav.perc + '\n'
        return sz


class Telepules:
    global jelentes  # jelentes osztaly objektuma

    def __init__(self, nev):
        # self.jelentes = jelentes
        self.nev = nev
        self.taviratok = [tav for tav in jelentes.taviratok if tav.tel == self.nev]

    def telepules_homerseklet_adatai(self):
        """egy telepules kozephomerseklete es homerseklet-ingadozasa"""
        tel = [tav for tav in jelentes.taviratok if tav.tel == self.nev]
        ho_ing = max(t.ho for t in tel) - min(t.ho for t in tel)
        koz_ho = 'NA'
        orak = [t.ora for t in tel if t.ora in ['01', '07', '13', '19']]

        if len(set(orak)) == 4:
            koz_ho = sum(t.ho for t in tel if t.ora in orak) / len(orak)
        if koz_ho == 'NA':
            return koz_ho, ho_ing
        else:
            return round(koz_ho), ho_ing

    def telepules_homerseklet_adatai_kiir(self):
        """egy telepules kozephomerseklete es homerseklet-ingadozasa kiir"""
        adat = self.telepules_homerseklet_adatai()
        if adat[0] == 'NA':
            return self.nev + ' ' + 'NA; Hőmérsékletingadozás: ' + str(adat[1])
        else:
            return self.nev + ' ' + str(adat[0]) + ' Hőmérsékletingadozás: ' + str(adat[1])

    def telepules_szelek(self):
        """egy telepuleshez tartozo szeladatok"""
        return [(t.ora, t.perc, t.szel[4:]) for t in self.taviratok]

    def telepules_szelek_kiir(self):
        """egy telepuleshez tartozo szeladatok kiir"""
        sz = self.nev + '\n'
        szelek = self.telepules_szelek()
        for ora, perc, szel in szelek:
            sz += ora + ':' + perc + ' ' + '#' * int(szel) + '\n'
        return sz

class Fajl:
    """Fajlmuveletek osztalya"""

    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        f = open(self.fnev)
        taviratok = [Tavirat(*x.split()) for x in f.readlines()]
        return taviratok

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w')
        print(adatok, end='', file=f)
        f.close()


# 1. feladat
fajl = Fajl('tavirathu13.txt')
adatok = fajl.beolvas()
jelentes = Jelentes(adatok)

# 2. feladat
varos = input("2. feladat\nAdja meg egy település kódját! Település: ").upper()
print("Az utolsó mérési adat a megadott településről ", jelentes.utolso_tavirat_varosbol_kiir(varos), "-kor érkezett.",
      sep='')

# 3. feladat
print("3. feladat")
print(jelentes.min_max_ho_kiir())

# 4. feladat
print("4. feladat\nSzélcsend:")
print(jelentes.szelcsend_taviratok_kiir())

# 5. feladat
for telep in jelentes.telepulesek:
    t = Telepules(telep)
    print(t.telepules_homerseklet_adatai_kiir())

# 6. feladat
for tel in jelentes.telepulesek:
    fajl = Fajl(tel + 'OOP.txt')
    t = Telepules(tel)
    fajl.kiir(t.telepules_szelek_kiir())
