import json
import requests
import ast
from colorama import Fore, init

global globaldonates, skyblockdonates, duelsdonates, donateconstructor

globaldonates = ["premium", "creative", "admin", "moder", "gadmin", "sozk", "osn", "oper", "support", "console", "sponsor",
           "helper", "fors", "staff", "manager", "mecenat"]

skyblockdonates = ["gold","diamond","emerald","magma","legend"]

duelsdonates = ["ghost","spartan","mage","immortal"]

donateconstructor = {
    "premium": "[Премиум]", "creative": "[Креатив]", "admin": "[Админ]", "moder": "[Модератор]",
    "gadmin": "[Гл.Админ]", "sozk": "[Создатель]", "osn": "[Основатель]", "oper": "[Оператор]",
    "support": "[Властелин]", "console": "[Консоль]", "sponsor": "[Сервер]", "helper": "[Хелпер]",
    "fors": "[FORS]", "staff": "[Команда]", "manager": "[Менеджер]", "mecenat": "[Меценат]","gold":"[Gold]",
    "diamond":"[Diamond]","emerald":"[Emerald]","magma":"[Magma]","legend":"[Legend]",
    "ghost":"[Ghost]","spartan":"[Spartan]","mage":"[Mage]","immortal":"[Immortal]"
}

init(autoreset=True)

startup_text = r"""         __                                      
   ____ |  |__   ____  ________ __   ___________ 
 _/ ___\|  |  \_/ __ \/ ____/  |  \_/ __ \_  __ \
 \  \___|   Y  \  ___< <_|  |  |  /\  ___/|  | \/
  \___  >___|  /\___  >__   |____/  \___  >__|   
      \/     \/     \/   |__|           \/ v1.0
"""

print(Fore.RED + startup_text)

import os

current_directory = os.path.dirname(os.path.abspath(__file__ if '__file__' in locals() else __file__))

json_file_path = os.path.join(current_directory, 'database.json')

try:
    with open(json_file_path, 'r', encoding='utf-8') as file:
        data = json.load(file)

    def find_info_by_nickname(nickname):
        results = []
        for key, value in data.items():
            if 'nickname' in value and value['nickname'] == nickname:
                result = {
                    '#': key,
                    'nickname': value['nickname'],
                    'purchased': value['purchased'],
                    'mode': value.get('mode', None)
                }
                results.append(result)
        return results

    def find_info_by_account(account):
        results = []
        for key, value in data.items():
            if key == account:
                result = {
                    '#': key,
                    'nickname': value['nickname'],
                    'purchased': value['purchased'],
                    'mode': value.get('mode', None)
                }
                results.append(result)
        return results

    def find_info_by_purchased(purchased):
        results = []
        for key, value in data.items():
            if 'purchased' in value and value['purchased'] == purchased:
                result = {
                    '#': key,
                    'nickname': value['nickname'],
                    'purchased': value['purchased'],
                    'mode': value.get('mode', None)
                }
                results.append(result)
        return results

    def find_info_by_mode(mode):
        results = []
        for key, value in data.items():
            if 'mode' in value and value['mode'] == mode:
                result = {
                    '#': key,
                    'nickname': value['nickname'],
                    'purchased': value['purchased'],
                    'mode': value['mode']
                }
                results.append(result)
        return results

    def check_donate_ban_mute(nickname):
        try:
            ban = "Нет"
            mute = "Нет"
            globaldonate = "Нету"
            skyblockdonate = "Нету"
            duelsdonate = "Нету"
            response = requests.post("https://forscraft.net/api/v1/info/getPrice", json={"username": f"{nickname}",
                                                                                        "server": "other",
                                                                                        "category": "punishments",
                                                                                        "purchase": "unban"})
            if ast.literal_eval(response.content.decode())["result"] == "failed":
                pass
            else:
                ban = "Да"
            response = requests.post("https://forscraft.net/api/v1/info/getPrice",
                                     json={"username": "asd", "server": "other", "category": "punishments",
                                           "purchase": "unmute", "promo_code": "", "amount": "1"})
            if ast.literal_eval(response.content.decode())["result"] == "failed":
                pass
            else:
                mute = "Да"
            for _ in globaldonates:
                response = requests.post("https://forscraft.net/api/v1/info/getPrice",
                                         json={"username": f"{nickname}", "server": "survival", "category": "groups",
                                               "purchase": f"{_}", "promo_code": "", "amount": "1"})
                if ast.literal_eval(response.content.decode())["result"] == "failed":
                    globaldonate = donateconstructor[_]
                else: break
            for _ in skyblockdonates:
                response = requests.post("https://forscraft.net/api/v1/info/getPrice",json={"username":f"{nickname}","server":"skyblock","category":"groups","purchase":f"{_}","promo_code":"","amount":"1"})
                if ast.literal_eval(response.content.decode())["result"] == "failed":
                    skyblockdonate = donateconstructor[_]
                else: break
            for _ in duelsdonates:
                response = requests.post("https://forscraft.net/api/v1/info/getPrice",json={"username":f"{nickname}","server":"duels","category":"groups","purchase":f"{_}","promo_code":"","amount":"1"})
                if ast.literal_eval(response.content.decode())["result"] == "failed":
                    duelsdonate = donateconstructor[_]
                else: break
            print(Fore.RED + " [!] Информация, которая была найдена по запросу:")
            print(Fore.WHITE + f" – Никнейм: {nickname}")
            print(Fore.WHITE + f" – Основная привилегия: {globaldonate}")
            print(Fore.WHITE + f" – Привилегия SkyBlock: {skyblockdonate}")
            print(Fore.WHITE + f" – Привилегия Duels: {duelsdonate}")
            print(Fore.WHITE + f" – В бане: {ban}")
            print(Fore.WHITE + f" – В муте: {mute}")
        except Exception as err:
            print(Fore.WHITE + " – Произошла ошибка:", err)

    while True:
        print(Fore.RED + " –––––––––––––––––––Main menu––––––––––––––––––––")
        print(Fore.RED + " Софт для проверки покупок на аккаунте, также другие")
        print(Fore.RED + " различные функции. Пожалуйста, выберите тип поиска:")
        print("   ")
        print(Fore.RED + " [1] Поиск по никнейму  |  [4] Поиск по режиму")
        print(Fore.RED + " [2] Поиск по покупке   |  [5] Проверка на донат и бан/мут")
        print(Fore.RED + " [3] Поиск по счёту     |  [6] FAQ по использованию софта")
        print(Fore.RED + " ––––––––––––––––––––––––––––––––––––––––––––––––")
        print("   ")

        choice = input(Fore.RED + " [+] Введите тип поиска > ").strip()

        if choice == '6':
            print("   ")
            print(" [!] Как пользоваться софтом?")
            print(" – После запуска софта, выберите тип поиска (1/2/3/4/5/6).")
            print(" – Введите нужный запрос для поиска информации.")
            print("   ")
            print(" [!] Почему софт не нашел информацию?")
            print(" – Попробуйте ввести запрос с правильным регистром.")
            print(" – Возможно, в нашей базе нет информации по запросу.")
            print(" – Если при запросе софт выдает ошибку, обратитесь в поддержку.")
            print("   ")
            print(" [!] О нашем софте:")
            print(" – Это общедоступный софт для поиска любой информации о аккаунте.")
            print(" – Наша база состоит из 92675 строк, информация с 2021 по 2023 год.")
            print(" – Обратиться в поддержку можно написав в Telegram этим людям:")
            print(" – t.me/yuwereru / t.me/ashireannierated (являются разработчиками)")
            print(" – С уважением, команда realforscraft!")
            continue

        if choice not in ['1', '2', '3', '4', '5']:
            print(Fore.WHITE + " [!] Введите правильный тип поиска!")
            continue

        search_term = input(Fore.RED + " [+] Введите запрос > ").strip()

        if choice == '1':
            search_results = find_info_by_nickname(search_term)
        elif choice == '2':
            search_results = find_info_by_purchased(search_term)
        elif choice == '3':
            search_results = find_info_by_account(search_term)
        elif choice == '4':
            search_results = find_info_by_mode(search_term)
        elif choice == '5':
            check_donate_ban_mute(search_term)
            continue

        if search_results:
            print(" [!] Информация, которая была найдена в нашей базе:")
            for result in search_results:
                print(f" – Счёт: {result['#']} / Никнейм: {result['nickname']} / Покупка: {result['purchased']}", end=' ')
                if result['mode']:
                    print(f"/ Режим: {result['mode']}")
                else:
                    print()
        else:
            print(Fore.WHITE + " – Информация по данному запросу не найдена.")

except FileNotFoundError:
    print(Fore.WHITE + f" – Файл {json_file_path} не найден. Убедитесь, что файл существует и находится в текущей директории.")
except json.JSONDecodeError:
    print(Fore.WHITE + f" – Ошибка декодирования JSON. Пожалуйста, убедитесь, что файл JSON имеет правильный формат.")
except Exception as e:
    print(Fore.WHITE + f" – Произошла ошибка: {str(e)}")
