import random
import threading
import time
import asyncio

import requests
from loguru import logger
from concurrent.futures import ThreadPoolExecutor

from tonutils.client import TonapiClient, ToncenterV3Client
from tonutils.utils import to_amount
from tonutils.wallet import (
    WalletV3R1,
    # Uncomment the following lines to use different wallet versions:
    WalletV3R2,
    WalletV4R1,
    WalletV4R2,
    WalletV5R1,
    HighloadWalletV2,
    HighloadWalletV3,
)

# 配置日志文件输出
# 按天分割日志文件，文件名包含日期，保留所有日志文件
logger.add("wallet_log_{time:YYYY-MM-DD}.log", rotation="1 day", retention="9999 days")

# API key for accessing the Tonapi (obtainable from https://tonconsole.com)
API_KEY = "AFMEX4F23ZRPOUIAAAAPHGIE5QECWZA5M75E54VD72O5IJEGP5IW3LOTXO7Z4QOX7MV6JQQ"

# Set to True for test network, False for main network
IS_TESTNET = False

headers = {
    'accept': '*/*',
    'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'authorization': 'Bearer AFPJTKEBPOX3AIYAAAAKA2HWOTRNJP5MUCV5DMDCZAAOCPSAYEYS3CILNQVLF2HWKED6USY',
    'cache-control': 'no-cache',
    'content-type': 'application/json',
    'dnt': '1',
    'origin': 'https://tonviewer.com',
    'pragma': 'no-cache',
    'priority': 'u=1, i',
    'referer': 'https://tonviewer.com/',
    'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="132", "Microsoft Edge";v="132"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'empty',
    'sec-fetch-mode': 'cors',
    'sec-fetch-site': 'cross-site',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0',
}


def get_ton_num(address):
    headers = {
        'accept': '*/*',
        'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
        'authorization': 'Bearer AFPJTKEBPOX3AIYAAAAKA2HWOTRNJP5MUCV5DMDCZAAOCPSAYEYS3CILNQVLF2HWKED6USY',
        'cache-control': 'no-cache',
        'content-type': 'application/json',
        'dnt': '1',
        'origin': 'https://tonviewer.com',
        'pragma': 'no-cache',
        'priority': 'u=1, i',
        'referer': 'https://tonviewer.com/',
        'sec-ch-ua': '"Not A(Brand";v="8", "Chromium";v="132", "Microsoft Edge";v="132"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
        'sec-fetch-dest': 'empty',
        'sec-fetch-mode': 'cors',
        'sec-fetch-site': 'cross-site',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0',
    }

    for i in range(3):
        try:
            response = requests.get(
                f'https://tonapi.io/v2/accounts/{address}',
                headers=headers,
            )

            return to_amount(int(response.json()["balance"]))
        except:
            time.sleep(random.random())

    return False


async def main(i) -> None:
    client = ToncenterV3Client(is_testnet=IS_TESTNET, rps=2, max_retries=1)
    wallet, public_key, private_key, mnemonic = WalletV4R2.create(client)

    for i1 in range(5):
        try:
            response = requests.get(
                f'https://tonapi.io/v2/accounts/{wallet.address.to_str(is_user_friendly=True, is_url_safe=True, is_bounceable=False, is_test_only=False)}',
                headers=headers,
            )

            logger.info(
                f"余额：{to_amount(int(response.json()["balance"]))} Address: {wallet.address.to_str(is_user_friendly=True, is_url_safe=True, is_bounceable=False, is_test_only=False)}，D：{' '.join(mnemonic)}，")

            break
        except:
            time.sleep(random.random())


def main1(i):
    asyncio.run(main(i))


if __name__ == "__main__":
    with ThreadPoolExecutor(max_workers=100) as executor:
        while True:
            executor.submit(main1, "grfreg")
            time.sleep(random.random())
