class Ido:
    def __init__(self, o=0, p=0, mp=0):
        osszmperc = o * 3600 + p * 60 + mp
        self.ora = osszmperc // 3600
        self.perc = (osszmperc - self.ora * 3600) // 60
        self.mperc = osszmperc % 60

    def mpbe(self) -> int:
        """ido masodpercben"""
        return self.ora * 3600 + self.perc * 60 + self.mperc

    def __sub__(self, other):
        """ket ido kulonbsege"""
        return Ido(0, 0, abs(self.mpbe() - other.mpbe()))

    def __gt__(self, other):
        return [False, True][self.mpbe() > other.mpbe()]

    def __lt__(self, other):
        return [False, True][self.mpbe() < other.mpbe()]


class Telefon:
    def __init__(self, szam=''):
        self.szam = szam

    def tipus(self):
        """telefonszam tipusa mobil-e"""
        return [False, True][self.szam[:2] in ['39', '41', '71']]


class Hivas:
    def __init__(self, telefon, kido, vido):
        self.telefon = telefon
        self.kido = kido
        self.vido = vido

    def csucsido(self) -> bool:
        """hivas csucsidohoz tartozik-e"""
        return [False, True][Ido(6, 59, 59) < self.kido < Ido(18, 0, 0)]

    def hivasideje_szamlazashoz(self) -> int:
        """hivas ideje percben"""
        return ((self.vido - self.kido).mpbe() + 59) // 60

    def hivas_dija(self) -> float:
        dij = {'mobil': 69.175, 'vezetekes': 30}  # csúcsidő
        dij2 = {'mobil': 46.675, 'vezetekes': 15}
        if self.telefon.tipus() and self.csucsido():
            return dij['mobil'] * self.hivasideje_szamlazashoz()
        elif self.telefon.tipus() and not self.csucsido():
            return dij2['mobil'] * self.hivasideje_szamlazashoz()
        elif not self.telefon.tipus() and self.csucsido():
            return dij['vezetekes'] * self.hivasideje_szamlazashoz()
        else:
            return dij2['vezetekes'] * self.hivasideje_szamlazashoz()


class Hivasok:
    def __init__(self, hivasok=None):
        if hivasok is None:
            hivasok = []
        self.hivasok = hivasok
        self.db = len(self.hivasok)

    def percek_kiir(self) -> str:
        """hivasok percei kiir"""
        sz = ''
        for hivas in self.hivasok:
            sz += str(hivas.hivasideje_szamlazashoz()) + ' ' + hivas.telefon.szam + '\n'
        return sz

    def csucsidos(self) -> int:
        """csucsidon beluli beszelgetesek szama"""
        return sum(1 for hivas in self.hivasok if hivas.csucsido())

    def csucsidon_kivul(self) -> int:
        """csucsidon kivuli beszelgetesek szama"""
        return self.db - self.csucsidos()

    def mobil(self) -> int:
        """mobilszamos beszelgetesek szama"""
        return sum(hivas.hivasideje_szamlazashoz() for hivas in self.hivasok if hivas.telefon.tipus())

    def vezetekes(self) -> int:
        """vezetekes beszelgetesek szama"""
        return sum(hivas.hivasideje_szamlazashoz() for hivas in self.hivasok if not hivas.telefon.tipus())

    def csucsdijasosszeg(self) -> int:
        """csucsidoben levo hivasokert vizetett osszeg"""
        return round(sum(hivas.hivas_dija() for hivas in self.hivasok if hivas.csucsido()), 3)


class Fajl:
    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        f = open(self.fnev)
        hivasok = []
        i = 0
        o1, p1, mp1, o2, p2, mp2 = None, None, None, None, None, None,
        for sor in f.readlines():
            if i % 2 == 0:
                o1, p1, mp1, o2, p2, mp2 = sor.split()
            else:
                telszam = sor.strip()
                hivasok.append(
                    Hivas(Telefon(telszam), Ido(int(o1), int(p1), int(mp1)), Ido(int(o2), int(p2), int(mp2))))
            i += 1
        f.close()
        return hivasok

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w')
        print(adatok, end='', file=f)
        f.close()


# 1. feladat
telefonszam = input("1. feladat\nAdjon meg egy telefonszámot: ")
telefon = Telefon(telefonszam)
print("A szám típusa:", telefon.tipus())

# 2. feladat
kezdet = input("2. feladat\nAdja meg a hívás kezdetét óra perc másodperc alakban: ").split()
vege = input("Adja meg a hívás végét óra perc másodperc alakban: ").split()
kezd = Ido(int(kezdet[0]), int(kezdet[1]), int(kezdet[2]))
veg = Ido(int(vege[0]), int(vege[1]), int(vege[2]))
print('A hívás ideje számlázás szempontjából:', Hivas(telefon, veg, kezd).hivasideje_szamlazashoz(), "perc")

# 3. feladat
fajl = Fajl('HIVASOK.TXT')
adatok = fajl.beolvas()
hivasok = Hivasok(adatok)
fajl = Fajl('percekOOP.txt')
fajl.kiir(hivasok.percek_kiir())
print("3. feladat\nFájbaírás kész.")

# 4. feladat
print("4. feladat\nCsúcsidőben lévő hívások:", hivasok.csucsidos(),
      "db, csúcsidőn kívüli hívások száma:", hivasok.csucsidon_kivul(), "db")

# 5. feladat
print("5. feladat\nMobilszám összesen:", hivasok.mobil(), "perc")
print("Vezetékse szám összesen:", hivasok.vezetekes(), "perc")

# 6. feladat
print("6. feladat\nA csúcsdíjas hívásokért fizetendő:", hivasok.csucsdijasosszeg(), "Ft")
