import random
import os
import time
import sqlite3

# ============================================
# CLASS JADOOGAR
# ============================================
class Jadoogar:
    def __init__(self, esm):
        self.esm = esm
        self.jan = 100
        self.bishtarin_jan = 100
        self.mana = 50
        self.bishtarin_mana = 50
        self.sekeh = random.randint(500, 1500)
        self.khaneh = None
        self.choob_dasti = None
        self.kif_majoon = []
        self.verdha = []
        self.afzayesh_asiib = 0
        self.zarb_afzayesh_majoon = 1.0

    def namayesh_vaziyat(self):
        print("")
        print("=" * 50)
        print("  Vaziyat " + self.esm + ":")
        print("  Khaneh: " + (self.khaneh.esm if self.khaneh else "Nadarad"))
        print("  Jan: " + str(self.jan) + "/" + str(self.bishtarin_jan))
        print("  Mana: " + str(self.mana) + "/" + str(self.bishtarin_mana))
        print("  Sekeh: " + str(self.sekeh))
        if self.choob_dasti:
            print("  Choob-e Dasti: " + self.choob_dasti.esm + " (+" + str(self.choob_dasti.afzayesh_asiib) + " asiib)")
        else:
            print("  Choob-e Dasti: Nadarad")
        if self.kif_majoon:
            print("  Majoon haye kif:")
            for m in self.kif_majoon:
                print("    - " + m.esm + " (bargardani " + str(m.meghdar_bargardani) + " " + m.noe + ")")
        else:
            print("  Majoon haye kif: Khali")
        print("=" * 50)


# ============================================
# CLASS KHANEH
# ============================================
class Khaneh:
    def __init__(self, esm, matn_bonus, noe_bonus):
        self.esm = esm
        self.matn_bonus = matn_bonus
        self.noe_bonus = noe_bonus

    def etelae_bonus(self, jadoogar):
        pass


class Gryffindor(Khaneh):
    def __init__(self):
        super().__init__("Gryffindor", "+30 Jan", "jan")
    def etelae_bonus(self, jadoogar):
        ghabl = jadoogar.bishtarin_jan
        jadoogar.bishtarin_jan += 30
        jadoogar.jan = jadoogar.bishtarin_jan
        ezafe = jadoogar.bishtarin_jan - ghabl
        print("  Gryffindor! \033[92m+" + str(ezafe) + " Jan\033[0m ezafe shod! (Jan: " + str(jadoogar.jan) + ")")


class Slytherin(Khaneh):
    def __init__(self):
        super().__init__("Slytherin", "+5 asiib", "asiib")
    def etelae_bonus(self, jadoogar):
        jadoogar.afzayesh_asiib += 5
        print("  Slytherin! \033[92m+5 asiib\033[0m ezafe shod! (be verdha ezafe mishe)")


class Ravenclaw(Khaneh):
    def __init__(self):
        super().__init__("Ravenclaw", "+20 Mana", "mana")
    def etelae_bonus(self, jadoogar):
        ghabl = jadoogar.bishtarin_mana
        jadoogar.bishtarin_mana += 20
        jadoogar.mana = jadoogar.bishtarin_mana
        ezafe = jadoogar.bishtarin_mana - ghabl
        print("  Ravenclaw! \033[92m+" + str(ezafe) + " Mana\033[0m ezafe shod! (Mana: " + str(jadoogar.mana) + ")")


class Hufflepuff(Khaneh):
    def __init__(self):
        super().__init__("Hufflepuff", "Majoon ha 20% ghvitar", "majoon")
    def etelae_bonus(self, jadoogar):
        jadoogar.zarb_afzayesh_majoon = 1.2
        print("  Hufflepuff! \033[92mMajoon ha 20% ghvitar\033[0m shod! (vaqti majoon mikhori ezafe mishe)")


# ============================================
# CLASS CHOOB DASTI
# ============================================
class ChoobDasti:
    def __init__(self, esm, afzayesh_asiib, gheymat):
        self.esm = esm
        self.afzayesh_asiib = afzayesh_asiib
        self.gheymat = gheymat


# ============================================
# CLASS MAJOON
# ============================================
class Majoon:
    def __init__(self, esm, noe, meghdar_bargardani, gheymat):
        self.esm = esm
        self.noe = noe
        self.meghdar_bargardani = meghdar_bargardani
        self.gheymat = gheymat


# ============================================
# CLASS VERD
# ============================================
class Verd:
    def __init__(self, esm, asiib, hazine_mana):
        self.esm = esm
        self.asiib = asiib
        self.hazine_mana = hazine_mana


# ============================================
# CLASS DOSHMAN
# ============================================
class Doshman:
    def __init__(self, esm, jan, asiib, emoji):
        self.esm = esm
        self.jan = jan
        self.bishtarin_jan = jan
        self.asiib = asiib
        self.emoji = emoji


# ============================================
# CLASS FOROOSHGAH
# ============================================
class Forooshgah:
    def __init__(self):
        self.choobha = [
            ChoobDasti("Choob-e Asa", 15, 300),
            ChoobDasti("Choob-e Simorgh", 10, 200),
            ChoobDasti("Choob-e Tak Shakh", 7, 150)
        ]
        self.majoonha = [
            Majoon("Majoon-e Shafa", "jan", 25, 50),
            Majoon("Majoon-e Mana", "mana", 20, 40),
            Majoon("Majoon-e Beynalmelali", "jan", 50, 90)
        ]

    def namayesh_choobha(self):
        print("")
        print("  --- Choob-e Dasti haye mojood ---")
        for i in range(len(self.choobha)):
            ch = self.choobha[i]
            print("  " + str(i+1) + ". " + ch.esm + " | Afzayesh Asiib: +" + str(ch.afzayesh_asiib) + " | Gheymat: " + str(ch.gheymat) + " sekkeh")

    def namayesh_majoonha(self):
        print("")
        print("  --- Majoon haye mojood ---")
        for i in range(len(self.majoonha)):
            m = self.majoonha[i]
            print("  " + str(i+1) + ". " + m.esm + " | Bargardani: " + str(m.meghdar_bargardani) + " " + m.noe + " | Gheymat: " + str(m.gheymat) + " sekkeh")

    def kharide_choob(self, jadoogar):
        self.namayesh_choobha()
        try:
            entekhab = int(input("\n  Kodom ro mikhay? (0 = bargasht): "))
            if entekhab == 0:
                return
            if 1 <= entekhab <= len(self.choobha):
                choob = self.choobha[entekhab - 1]
                if jadoogar.sekeh >= choob.gheymat:
                    jadoogar.sekeh -= choob.gheymat
                    jadoogar.choob_dasti = choob
                    print("\n  >> " + choob.esm + " ro kharidi! (+" + str(choob.afzayesh_asiib) + " asiib ezafe)")
                else:
                    print("\n  >> Sekeh kafi nist!")
            else:
                print("\n  Shomare eshtebah!")
        except:
            print("\n  Lotfan adad vared kon!")

    def kharide_majoon(self, jadoogar):
        self.namayesh_majoonha()
        try:
            entekhab = int(input("\n  Kodom ro mikhay? (0 = bargasht): "))
            if entekhab == 0:
                return
            if 1 <= entekhab <= len(self.majoonha):
                m = self.majoonha[entekhab - 1]
                if jadoogar.sekeh >= m.gheymat:
                    jadoogar.sekeh -= m.gheymat
                    majoon_jadid = Majoon(m.esm, m.noe, m.meghdar_bargardani, m.gheymat)
                    jadoogar.kif_majoon.append(majoon_jadid)
                    print("\n  >> " + m.esm + " ro kharidi!")
                else:
                    print("\n  >> Sekeh kafi nist!")
            else:
                print("\n  Shomare eshtebah!")
        except:
            print("\n  Lotfan adad vared kon!")

    def vorood(self, jadoogar):
        print("")
        print("\033[96m" + "=" * 55 + "\033[0m")
        print("\033[96m  Khosh amadi be Bazar-e Jadoogari (Koche Diagon)!\033[0m")
        print("\033[96m" + "=" * 55 + "\033[0m")
        print("\n  Inja mitoni Choob-e Dasti va Majoon bekhar:")

        while True:
            print("")
            print("  1. Kharide Choob-e Dasti")
            print("  2. Kharide Majoon")
            print("  3. Khorooj")
            try:
                gozine = int(input("  Chikar koni? (1-3): "))
                if gozine == 1:
                    self.kharide_choob(jadoogar)
                elif gozine == 2:
                    self.kharide_majoon(jadoogar)
                elif gozine == 3:
                    print("\n  Az Bazar-e Jadoogari kharej shodi!")
                    break
                else:
                    print("\n  Eshtebah!")
            except:
                print("\n  Lotfan adad vared kon!")


# ============================================
# CLASS MOBAREZE
# ============================================
class Mobareze:
    def __init__(self, jadoogar, doshman):
        self.jadoogar = jadoogar
        self.doshman = doshman
        self.shomare_marhale = 0

    def sakht_navar_jan(self, feli, bishtarin):
        tool = 20
        por = int(tool * feli / bishtarin)
        if por < 0:
            por = 0
        navar = "█" * por + "░" * (tool - por)
        return navar

    def namayesh_mobareze(self):
        print("")
        print("\033[93m" + "█" * 55 + "\033[0m")
        print("\033[93m  " + self.jadoogar.esm + "  VS  " + self.doshman.esm + " " + self.doshman.emoji + "\033[0m")
        print("\033[93m" + "█" * 55 + "\033[0m")
        
        navar_jan = self.sakht_navar_jan(self.jadoogar.jan, self.jadoogar.bishtarin_jan)
        print("  " + self.jadoogar.esm + "  Jan [" + navar_jan + "] " + str(self.jadoogar.jan) + "/" + str(self.jadoogar.bishtarin_jan))
        print("  Mana: " + str(self.jadoogar.mana) + "/" + str(self.jadoogar.bishtarin_mana))
        
        navar_doshman = self.sakht_navar_jan(self.doshman.jan, self.doshman.bishtarin_jan)
        print("  " + self.doshman.esm + " " + self.doshman.emoji + " Jan [" + navar_doshman + "] " + str(self.doshman.jan) + "/" + str(self.doshman.bishtarin_jan))
        print("\033[90m" + "─" * 55 + "\033[0m")

    def estefade_verd(self):
        if not self.jadoogar.verdha:
            print("\n  Verd-e Jadooi nadari!")
            return

        print("")
        print("  --- Verd-e Jadooi ---")
        
        print("  Khaneh: " + self.jadoogar.khaneh.esm)
        if self.jadoogar.khaneh.noe_bonus == "asiib":
            print("  \033[92mBonus Khaneh: +" + str(self.jadoogar.afzayesh_asiib) + " asiib be verdha ezafe mishe\033[0m")
        
        if self.jadoogar.choob_dasti:
            print("  Choob-e Dasti: " + self.jadoogar.choob_dasti.esm + " (+" + str(self.jadoogar.choob_dasti.afzayesh_asiib) + " asiib)")
        print("")
        
        for i in range(len(self.jadoogar.verdha)):
            v = self.jadoogar.verdha[i]
            bonus_choob = self.jadoogar.choob_dasti.afzayesh_asiib if self.jadoogar.choob_dasti else 0
            bonus_khaneh = self.jadoogar.afzayesh_asiib
            kole_asiib = v.asiib + bonus_choob + bonus_khaneh
            vaziyat = "[OK]" if self.jadoogar.mana >= v.hazine_mana else "[Mana nist]"
            
            matn_asiib = str(v.asiib) + " (asli)"
            if bonus_choob > 0:
                matn_asiib += " + \033[92m" + str(bonus_choob) + " (choob)\033[0m"
            if bonus_khaneh > 0:
                matn_asiib += " + \033[92m" + str(bonus_khaneh) + " (" + self.jadoogar.khaneh.esm + ")\033[0m"
            if bonus_choob > 0 or bonus_khaneh > 0:
                matn_asiib += " = \033[93m" + str(kole_asiib) + "\033[0m"
            
            print("  " + str(i+1) + ". " + v.esm + " | Asiib: " + matn_asiib + " | Mana: " + str(v.hazine_mana) + " " + vaziyat)

        try:
            entekhab = int(input("\n  Kodom Verd? (0 = bargasht): "))
            if entekhab == 0:
                return
            if 1 <= entekhab <= len(self.jadoogar.verdha):
                verd = self.jadoogar.verdha[entekhab - 1]
                if self.jadoogar.mana >= verd.hazine_mana:
                    self.jadoogar.mana -= verd.hazine_mana
                    
                    bonus_choob = self.jadoogar.choob_dasti.afzayesh_asiib if self.jadoogar.choob_dasti else 0
                    bonus_khaneh = self.jadoogar.afzayesh_asiib
                    kole_asiib = verd.asiib + bonus_choob + bonus_khaneh
                    
                    self.doshman.jan -= kole_asiib
                    if self.doshman.jan < 0:
                        self.doshman.jan = 0
                    
                    print("\n  " + verd.esm + "! " + str(verd.asiib) + " (asli)", end="")
                    if bonus_choob > 0:
                        print(" + \033[92m" + str(bonus_choob) + " (choob)\033[0m", end="")
                    if bonus_khaneh > 0:
                        print(" + \033[92m" + str(bonus_khaneh) + " (" + self.jadoogar.khaneh.esm + ")\033[0m", end="")
                    print(" = \033[93m" + str(kole_asiib) + "\033[0m asiib be " + self.doshman.esm + " " + self.doshman.emoji + " zad! (-" + str(verd.hazine_mana) + " Mana)")
                else:
                    print("\n  Mana kafi nist!")
            else:
                print("\n  Shomare eshtebah!")
        except:
            print("\n  Lotfan adad vared kon!")

    def estefade_majoon(self):
        if not self.jadoogar.kif_majoon:
            print("\n  Majoon nadari!")
            return

        print("")
        print("  --- Majoon haye kif ---")
        print("  Khaneh: " + self.jadoogar.khaneh.esm)
        if self.jadoogar.khaneh.noe_bonus == "majoon":
            print("  \033[92mBonus Khaneh: Majoon ha 20% ghvitar hastan\033[0m")
        print("")
        
        for i in range(len(self.jadoogar.kif_majoon)):
            m = self.jadoogar.kif_majoon[i]
            if self.jadoogar.khaneh.noe_bonus == "majoon":
                ghvi_shode = int(m.meghdar_bargardani * 1.2)
                ezafe = ghvi_shode - m.meghdar_bargardani
                print("  " + str(i+1) + ". " + m.esm + " (+" + str(m.meghdar_bargardani) + " " + m.noe + " asli + \033[92m" + str(ezafe) + " (Hufflepuff)\033[0m = \033[93m" + str(ghvi_shode) + "\033[0m)")
            else:
                print("  " + str(i+1) + ". " + m.esm + " (+" + str(m.meghdar_bargardani) + " " + m.noe + ")")

        try:
            entekhab = int(input("\n  Kodom Majoon? (0 = bargasht): "))
            if entekhab == 0:
                return
            if 1 <= entekhab <= len(self.jadoogar.kif_majoon):
                majoon = self.jadoogar.kif_majoon.pop(entekhab - 1)
                meghdar_asli = majoon.meghdar_bargardani
                meghdar = int(meghdar_asli * self.jadoogar.zarb_afzayesh_majoon)
                ezafe = meghdar - meghdar_asli

                if majoon.noe == "jan":
                    ghabl = self.jadoogar.jan
                    self.jadoogar.jan = min(self.jadoogar.bishtarin_jan, self.jadoogar.jan + meghdar)
                    darya = self.jadoogar.jan - ghabl
                    print("\n  " + majoon.esm + "! +" + str(meghdar_asli) + " (asli)", end="")
                    if ezafe > 0:
                        print(" + \033[92m" + str(ezafe) + " (Hufflepuff)\033[0m", end="")
                    print(" = \033[93m" + str(darya) + " Jan\033[0m")

                elif majoon.noe == "mana":
                    ghabl = self.jadoogar.mana
                    self.jadoogar.mana = min(self.jadoogar.bishtarin_mana, self.jadoogar.mana + meghdar)
                    darya = self.jadoogar.mana - ghabl
                    print("\n  " + majoon.esm + "! +" + str(meghdar_asli) + " (asli)", end="")
                    if ezafe > 0:
                        print(" + \033[92m" + str(ezafe) + " (Hufflepuff)\033[0m", end="")
                    print(" = \033[93m" + str(darya) + " Mana\033[0m")

            else:
                print("\n  Shomare eshtebah!")
        except:
            print("\n  Lotfan adad vared kon!")

    def nobat_doshman(self):
        if self.doshman.jan > 0:
            self.jadoogar.jan -= self.doshman.asiib
            if self.jadoogar.jan < 0:
                self.jadoogar.jan = 0
            print("  " + self.doshman.esm + " " + self.doshman.emoji + " be to hamle kard! " + str(self.doshman.asiib) + " asiib khordi!")

    def shoroo(self):
        print("")
        print("\033[91m" + "█" * 55 + "\033[0m")
        print("\033[91m  MOBAREZE BA " + self.doshman.esm.upper() + " " + self.doshman.emoji + "\033[0m")
        print("\033[91m" + "█" * 55 + "\033[0m")

        while self.jadoogar.jan > 0 and self.doshman.jan > 0:
            self.shomare_marhale += 1
            print("\n\033[93m  --- MARHALE " + str(self.shomare_marhale) + " ---\033[0m")
            
            self.namayesh_mobareze()

            print("  1. Verd-e Jadooi")
            print("  2. Majoon")
            print("  3. Vaziyat")

            try:
                amel = int(input("  Chikar koni? (1-3): "))
                if amel == 1:
                    self.estefade_verd()
                elif amel == 2:
                    self.estefade_majoon()
                elif amel == 3:
                    self.jadoogar.namayesh_vaziyat()
                    self.shomare_marhale -= 1
                    continue
                else:
                    print("\n  Eshtebah!")
                    self.shomare_marhale -= 1
                    continue
                self.nobat_doshman()
            except:
                print("\n  Lotfan adad vared kon!")
                self.shomare_marhale -= 1

        print("")
        print("\033[93m" + "█" * 55 + "\033[0m")
        if self.jadoogar.jan <= 0:
            print("\033[91m  SHEKAST! Shekast khordi...\033[0m")
            return "Shekast"
        else:
            print("\033[92m  PIROOZI! Pirouz shodi!\033[0m")
            return "Piroozi"


# ============================================
# DATABASE
# ============================================

def ijad_paygah():
    etesal = sqlite3.connect("hogwarts.db")
    mokhatab = etesal.cursor()

    mokhatab.execute("""
    CREATE TABLE IF NOT EXISTS bazikonan(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        esm TEXT UNIQUE,
        khaneh TEXT,
        jan INTEGER,
        bishtarin_jan INTEGER,
        mana INTEGER,
        bishtarin_mana INTEGER,
        sekkeh INTEGER,
        choob_dasti TEXT,
        afzayesh_asiib INTEGER,
        zarb_afzayesh_majoon REAL
    )
    """)

    mokhatab.execute("""
    CREATE TABLE IF NOT EXISTS kif_majoon(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        esm_bazikon TEXT,
        esm_majoon TEXT,
        noe TEXT,
        meghdar_bargardani INTEGER,
        gheymat INTEGER
    )
    """)

    mokhatab.execute("""
    CREATE TABLE IF NOT EXISTS tarikhche_mobareze(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        esm_bazikon TEXT,
        esm_doshman TEXT,
        natije TEXT
    )
    """)

    etesal.commit()
    etesal.close()


def zakhire_bazikon(jadoogar):
    etesal = sqlite3.connect("hogwarts.db")
    mokhatab = etesal.cursor()

    esm_choob = jadoogar.choob_dasti.esm if jadoogar.choob_dasti else ""

    mokhatab.execute("""
    INSERT OR REPLACE INTO bazikonan
    (esm, khaneh, jan, bishtarin_jan, mana, bishtarin_mana, sekkeh, choob_dasti, afzayesh_asiib, zarb_afzayesh_majoon)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
    """, (
        jadoogar.esm,
        jadoogar.khaneh.esm,
        jadoogar.jan,
        jadoogar.bishtarin_jan,
        jadoogar.mana,
        jadoogar.bishtarin_mana,
        jadoogar.sekeh,
        esm_choob,
        jadoogar.afzayesh_asiib,
        jadoogar.zarb_afzayesh_majoon
    ))

    mokhatab.execute("DELETE FROM kif_majoon WHERE esm_bazikon=?", (jadoogar.esm,))

    for majoon in jadoogar.kif_majoon:
        mokhatab.execute("""
        INSERT INTO kif_majoon
        (esm_bazikon, esm_majoon, noe, meghdar_bargardani, gheymat)
        VALUES (?, ?, ?, ?, ?)
        """, (
            jadoogar.esm,
            majoon.esm,
            majoon.noe,
            majoon.meghdar_bargardani,
            majoon.gheymat
        ))

    etesal.commit()
    etesal.close()


def zakhire_natije(esm_bazikon, esm_doshman, natije):
    etesal = sqlite3.connect("hogwarts.db")
    mokhatab = etesal.cursor()
    mokhatab.execute("""
    INSERT INTO tarikhche_mobareze
    (esm_bazikon, esm_doshman, natije)
    VALUES (?, ?, ?)
    """, (esm_bazikon, esm_doshman, natije))
    etesal.commit()
    etesal.close()


def bazkhani_bazikon(esm):
    etesal = sqlite3.connect("hogwarts.db")
    mokhatab = etesal.cursor()

    mokhatab.execute("SELECT * FROM bazikonan WHERE esm=?", (esm,))
    radif = mokhatab.fetchone()

    if radif is None:
        etesal.close()
        return None

    jadoogar = Jadoogar(radif[1])
    jadoogar.jan = radif[3]
    jadoogar.bishtarin_jan = radif[4]
    jadoogar.mana = radif[5]
    jadoogar.bishtarin_mana = radif[6]
    jadoogar.sekeh = radif[7]
    jadoogar.afzayesh_asiib = radif[9]
    jadoogar.zarb_afzayesh_majoon = radif[10]

    esm_khaneh = radif[2]
    if esm_khaneh == "Gryffindor":
        jadoogar.khaneh = Gryffindor()
    elif esm_khaneh == "Slytherin":
        jadoogar.khaneh = Slytherin()
    elif esm_khaneh == "Ravenclaw":
        jadoogar.khaneh = Ravenclaw()
    elif esm_khaneh == "Hufflepuff":
        jadoogar.khaneh = Hufflepuff()

    mokhatab.execute("""
    SELECT esm_majoon, noe, meghdar_bargardani, gheymat
    FROM kif_majoon WHERE esm_bazikon=?
    """, (esm,))
    majoonha = mokhatab.fetchall()
    for m in majoonha:
        jadoogar.kif_majoon.append(Majoon(m[0], m[1], m[2], m[3]))

    etesal.close()
    return jadoogar


def dadan_verdha(jadoogar):
    jadoogar.verdha = [
        Verd("Expelliarmus", 15, 10),
        Verd("Stupefy", 20, 15),
        Verd("Sectumsempra", 30, 25),
        Verd("Bombarda", 25, 20),
        Verd("Avada Kedavra", 50, 40)
    ]


# ============================================
# GAME
# ============================================

def pak_kardan():
    os.system('cls' if os.name == 'nt' else 'clear')

def bargozari(matn, sanie=2):
    print("")
    print("  " + matn, end="")
    for _ in range(sanie * 4):
        time.sleep(0.25)
        print(".", end="", flush=True)
    print("")

def bazi_jadid():
    pak_kardan()
    print("")
    print("\033[95m" + "*" * 55 + "\033[0m")
    print("\033[95m  WELCOME TO HARRY POTTER WORLD!\033[0m")
    print("\033[95m" + "*" * 55 + "\033[0m")

    esm = input("\n  Esm-e jadoogar ro vared kon: ")
    jadoogar = Jadoogar(esm)
    print("\n  Salam " + jadoogar.esm + "!")
    print("  Sekeh: " + str(jadoogar.sekeh))

    # Kolahe Tasmim Giri
    print("")
    print("\033[94m" + "=" * 55 + "\033[0m")
    print("\033[94m  MARHALE 1: KOLAHE TASMIM GIRI\033[0m")
    print("\033[94m" + "=" * 55 + "\033[0m")
    print("\n  Khaneh ha va bonus hashon:")
    print("  - Gryffindor : \033[92m+30 Jan\033[0m")
    print("  - Slytherin  : \033[92m+5 asiib\033[0m (be verdha ezafe mishe)")
    print("  - Ravenclaw  : \033[92m+20 Mana\033[0m")
    print("  - Hufflepuff : \033[92mMajoon ha 20% ghvitar\033[0m (vaqti majoon mikhori)")
    input("\n  Enter bezan...")

    khanehha = [Gryffindor(), Slytherin(), Ravenclaw(), Hufflepuff()]
    khaneh_entekhabi = random.choice(khanehha)
    jadoogar.khaneh = khaneh_entekhabi
    bargozari("Kolahe Tasmim Giri dar hale barrasi")
    print("\n  >> Kolahe Tasmim Giri: " + khaneh_entekhabi.esm + "!")
    khaneh_entekhabi.etelae_bonus(jadoogar)
    input("\n  Enter bezan...")

    # Forooshgah
    print("")
    print("\033[96m" + "=" * 55 + "\033[0m")
    print("\033[96m  MARHALE 2: BAZAR-E JADOOGARI (KOCHE DIAGON)\033[0m")
    print("\033[96m" + "=" * 55 + "\033[0m")
    forooshgah = Forooshgah()
    forooshgah.vorood(jadoogar)

    # Verdha
    print("")
    print("\033[94m" + "=" * 55 + "\033[0m")
    print("\033[94m  MARHALE 3: YADGIRI VERD-E JADOOI HA\033[0m")
    print("\033[94m" + "=" * 55 + "\033[0m")
    dadan_verdha(jadoogar)
    print("\n  5 Verd-e Jadooi yad gerefti:")
    for v in jadoogar.verdha:
        print("  - " + v.esm + " (Asiib: " + str(v.asiib) + ", Mana: " + str(v.hazine_mana) + ")")
    jadoogar.namayesh_vaziyat()

    # Jostojoye Doshman
    print("")
    print("\033[95m" + "=" * 55 + "\033[0m")
    print("\033[95m  MARHALE 4: JOSTOJOYE DOSHMAN\033[0m")
    print("\033[95m" + "=" * 55 + "\033[0m")
    doshmanha = [
        Doshman("Dragon", 120, 18, "🐉"),
        Doshman("Dementor", 90, 14, "👻"),
        Doshman("Troll", 100, 12, "🧌"),
        Doshman("Basilisk", 110, 20, "🐍"),
        Doshman("Death Eater", 80, 15, "💀")
    ]

    while True:
        print("")
        print("  1. Jostojoye Doshman")
        print("  2. Bargasht be Bazar")
        try:
            gozine = int(input("  Chikar koni? (1-2): "))
            if gozine == 1:
                print("\n  Doshman haye mojood:")
                for d in doshmanha:
                    print("  - " + d.esm + " " + d.emoji + " (Jan: " + str(d.jan) + ", Asiib: " + str(d.asiib) + ")")
                bargozari("Dar hale jostojo")
                doshman = random.choice(doshmanha)
                print("\n  >> " + doshman.esm + " " + doshman.emoji + " peyda shod!")
                input("\n  Enter bezan...")
                break
            elif gozine == 2:
                forooshgah.vorood(jadoogar)
                jadoogar.namayesh_vaziyat()
            else:
                print("\n  Eshtebah!")
        except:
            print("\n  Lotfan adad vared kon!")

    # Mobareze
    print("")
    print("\033[91m" + "█" * 55 + "\033[0m")
    print("\033[91m  MARHALE 5: MOBAREZE\033[0m")
    print("\033[91m" + "█" * 55 + "\033[0m")
    mobareze = Mobareze(jadoogar, doshman)
    natije = mobareze.shoroo()

    zakhire_natije(jadoogar.esm, doshman.esm, natije)
    zakhire_bazikon(jadoogar)

    print("")
    print("\033[95m" + "*" * 55 + "\033[0m")
    print("\033[95m  Mamnoon ke bazi kardi!\033[0m")
    print("\033[95m" + "*" * 55 + "\033[0m")
    input("\n  Enter bezan bargard be menu...")

def bazi_ghabli():
    pak_kardan()
    print("")
    print("\033[95m  LOAD GAME\033[0m")
    esm = input("\n  Esm ro vared kon: ")
    jadoogar = bazkhani_bazikon(esm)
    if jadoogar is None:
        print("\n  Bazikon ba in esm peyda nashod!")
        input("\n  Enter bezan...")
        return

    dadan_verdha(jadoogar)
    print("\n  >> " + jadoogar.esm + " bargasht!")
    jadoogar.namayesh_vaziyat()

    forooshgah = Forooshgah()
    doshmanha = [
        Doshman("Dragon", 120, 18, "🐉"),
        Doshman("Dementor", 90, 14, "👻"),
        Doshman("Troll", 100, 12, "🧌"),
        Doshman("Basilisk", 110, 20, "🐍"),
        Doshman("Death Eater", 80, 15, "💀")
    ]

    while True:
        print("")
        print("  1. Bere Bazar (Diagon Alley)")
        print("  2. Jostojoye Doshman & Jang")
        print("  3. Save & Khorooj be Menu")
        try:
            goz = int(input("  Chikar koni? "))
            if goz == 1:
                forooshgah.vorood(jadoogar)
                jadoogar.namayesh_vaziyat()
            elif goz == 2:
                while True:
                    print("")
                    print("  1. Jostojoye Doshman")
                    print("  2. Bargasht")
                    try:
                        entekhab = int(input("  Chikar koni? "))
                        if entekhab == 1:
                            print("\n  Doshman haye mojood:")
                            for d in doshmanha:
                                print("  - " + d.esm + " " + d.emoji + " (Jan: " + str(d.jan) + ", Asiib: " + str(d.asiib) + ")")
                            bargozari("Dar hale jostojo")
                            doshman = random.choice(doshmanha)
                            print("\n  >> " + doshman.esm + " " + doshman.emoji + " peyda shod!")
                            input("\n  Enter bezan...")
                            mobareze = Mobareze(jadoogar, doshman)
                            natije = mobareze.shoroo()
                            zakhire_natije(jadoogar.esm, doshman.esm, natije)
                            zakhire_bazikon(jadoogar)
                            break
                        elif entekhab == 2:
                            break
                        else:
                            print("  Eshtebah!")
                    except:
                        print("  Lotfan adad vared kon!")
            elif goz == 3:
                zakhire_bazikon(jadoogar)
                print("\n  Bazikon save shod!")
                break
            else:
                print("  Eshtebah!")
        except:
            print("  Lotfan adad vared kon!")

# ============================================
# MENU ASLI
# ============================================

def menu_asli():
    ijad_paygah()
    while True:
        pak_kardan()
        print("")
        print("\033[95m  HARRY POTTER WORLD\033[0m")
        print("  1. Bazi Jadid")
        print("  2. Bazi Ghabli")
        print("  3. Khorooj")
        try:
            entekhab = int(input("  Entekhab: "))
            if entekhab == 1:
                bazi_jadid()
            elif entekhab == 2:
                bazi_ghabli()
            elif entekhab == 3:
                print("\n  Khodahafez!")
                break
            else:
                print("  Eshtebah!")
                input()
        except:
            print("  Lotfan adad vared kon!")
            input()

if __name__ == "__main__":
    menu_asli()