# standard imports
import os
import json
import logging

# third-party imports
import pytest
from cic_eth.eth.rpc import RpcClient
from crypto_dev_signer.keystore import ReferenceKeystore
#from crypto_dev_signer.eth.web3ext import Web3 as Web3ext

logg = logging.getLogger(__file__)


# TODO: need mock for deterministic signatures
# depends on mock blockchain (ganache) where private key is passed directly to this module
@pytest.fixture(scope='session')
def init_mock_keystore(
        ):
    raise NotImplementedError


@pytest.fixture(scope='session')
def init_keystore(
        load_config,
        database_engine,
        ):
        #symkey_hex = os.environ.get('CIC_SIGNER_SECRET')
        symkey_hex = load_config.get('SIGNER_SECRET')
        symkey = bytes.fromhex(symkey_hex)
        opt = {
                'symmetric_key': symkey,
                }
        k = ReferenceKeystore(database_engine, **opt)
        k.db_session.execute('DELETE from ethereum')
        k.db_session.commit()
        keys_file = load_config.get('SIGNER_DEV_KEYS_PATH')
        addresses = []
        if keys_file:
            logg.debug('loading keys from {}'.format(keys_file))
            f = open(keys_file, 'r')
            j = json.load(f)
            f.close()
            signer_password = load_config.get('SIGNER_PASSWORD')
            for pk in j['private']:
                address_hex = k.import_raw_key(bytes.fromhex(pk[2:]), signer_password)
                addresses.append(address_hex)
    
        RpcClient.set_provider_address(addresses[0])
        return addresses