class Krater:
    """kráter osztálya"""
    def __init__(self, x=0, y=0, r=0, n=''):
        self.x = x
        self.y = y
        self.r = r
        self.n = n
        self.terulet = round(self.r ** 2 * 3.14,2)


    def megjelenit(self):
        return (f'A kráter középpontja X={self.x}'
                f'Y={self.y} sugara={self.r}')



    def tavolsag(self, krater) -> float:
        """távolság egy másik krátertől"""
        return ((krater.x - self.x) *
                (krater.x - self.x) + (krater.y - self.y) *
                (krater.y - self.y)) ** 0.5


    def fedi(self, krater) -> bool:
        """van-e közös rész"""
        return self.tavolsag(krater) <= self.r + krater.r


    def tartalmazza(self, krater) -> bool:
        """tartalmazza-e a másik kratert"""
        return self.r > krater.r and self.tavolsag(krater) < self.r - krater.r


class Egitest:
    """égitest osztálya"""
    def __init__(self, kraterek = None):
        if kraterek is None:
            kraterek = []
        self.kraterek = kraterek
        self.db = len(kraterek)

    def krater_keres(self, nev) -> Krater:
        """név alapján ad egy krátert"""

        for k in self.kraterek:
            if k.n == nev:
                return k

    def legnagyobb_krater(self) -> Krater:
        """a legnagyobb sugarú kráter"""
        maxr = 0
        for k in self.kraterek:
            if k.r > maxr:
                maxK = k
                maxr = k.r
        return maxK


    def legnagyobb_krater_megjelenit(self):
        maxK = self.legnagyobb_krater()
        return (f'A legnagyobb kráter neve és sugara: '
                f'{maxK.n} {maxK.r}')

    def nincs_kozos_resz(self, krater) -> list:
        """kozos resszel nem rendelkezo kraterek"""
        kozos = []
        for k in self.kraterek:
            if not krater.fedi(k):
                kozos.append(k)
        return kozos

    def nincs_kozos_resz_megjelenitese(self, krater):
        nevek = [k.n for k in self.nincs_kozos_resz(krater)]
        s = 'Nincs közös része: '
        s += ', '.join(nevek)
        s += '.'
        return s

    def tartalmazok(self) -> list:
        t = []
        for k1 in self.kraterek:
            for k2 in self.kraterek:
                if k1.tartalmazza(k2):
                    t.append((k1, k2))
        return t

    def tartalmaz_kiir(self) -> str:
        s = ''
        for t in self.tartalmazok():
            s += 'A(z) ' + t[0].n + 'kráter tartalmazza a(z) '
            s += t[1].n + ' krátert.\n'
        return s

    def teruletek_kiir(self) -> str:
        s = ''
        for k in self.kraterek:
            s += str(k.terulet) + '\t' + k.n + '\n'
        return s



class Fajl:
    """Fajlmuveletek osztalya"""

    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        with open(self.fnev) as f:
            kraterek = []
            for sor in f.readlines():
                x, y, r, n = sor.split('\t')
                kraterek.append(Krater(float(x), float(y), float(r), n.strip()))
        return kraterek


    def kiir(self, adatok):
        """fajlba iras"""
        with open(self.fnev, 'w') as f:
            print(adatok, end='', file=f)

class Feladat:
    def __init__(self, sorszam):
        self.sorszam = sorszam

    def kiir(self):
        print(str(self.sorszam) + '. feladat')


# 1. feladat
fajl = Fajl('felszin_tpont.txt')
kraterek = fajl.beolvas()

# 2. feladat
Egitest = Egitest(kraterek)
print(f"2. feladat\nA kráterek száma: {Egitest.db}")

# 3. feladat
nev = input("3. feladat\nKérem egy kráter nevét: ")
Krater = Egitest.krater_keres(nev)
if Krater: print(Krater.megjelenit())
else: print("Nincs ilyen kráter.")

# 4. feladat
print(f"4. feladat\n{Egitest.legnagyobb_krater_megjelenit()}")

# 6. feladat
nev = input("3. feladat\nKérem egy kráter nevét: ")
krater = Egitest.krater_keres(nev)
if krater: print(Egitest.nincs_kozos_resz_megjelenitese(krater))

# 7. feladat
print(f"7. feladat {Egitest.tartalmaz_kiir()}")

# 8. feladat
fajl = Fajl("terulet2.txt")
fajl.kiir(Egitest.teruletek_kiir())
