import os

from bitcoinlib.keys import HDKey
from bitcoinlib.mnemonic import Mnemonic
from bitcoinlib.wallets import Wallet

import database

def get_wallet_name(wallet_id, user_id):
    return "wallet_{}user_{}".format(wallet_id, user_id)


def generate_klist(hd_keys, private):
    return [hd_keys[x] if x == private else hd_keys[x].public_master_multisig() for x in range(len(hd_keys))]


def generate_hd_keys(amount):
    mnemonics = [Mnemonic().generate(strength=256, add_checksum=True) for i in range(amount)]
    keys = [HDKey.from_passphrase(passphrase, network=os.getenv("BTC_NETWORK"), multisig=True) for passphrase in mnemonics]
    return keys, mnemonics
    pass


def generate_wallets(user_wallets):
    count = user_wallets.count()
    hd_keys, mnemonics = generate_hd_keys(count)
    wallets = []
    for i in range(count):
        uw = user_wallets[i]
        wallet_name = get_wallet_name(uw.wallet_id.id,uw.user_id.id)
        wallet = Wallet.create(wallet_name,
                               sigs_required=uw.wallet_id.min_co_signers,
                               keys=generate_klist(hd_keys, i),
                               network=os.getenv("BTC_NETWORK"),
                               db_uri=database.get_db_uri())
        wallets.append(wallet)
    return wallets, mnemonics