#DONATION 16RdQZ86NUWQbE6rM86JbxnnaCDcAKqa9

####HASHNET API HELPER####

import urllib.parse
import urllib.request
import time
import hashlib
import hmac
import json

USERNAME=''
ACCESS_KEY=''
SECRET_KEY=''


BASEURL='https://www.hashnest.com/api/'
APIVERSION='v1'
URL=BASEURL+APIVERSION+'/'
def get_nonce():
    return int(time.time()*100000);

def get_signature(nonce):
    global ACCESS_KEY,USERNAME,SECRET_KEY
    message = (str(nonce) + USERNAME + ACCESS_KEY).encode(encoding='utf_8', errors='strict')
    return hmac.new(bytearray(SECRET_KEY,'utf-8'), msg=message, digestmod=hashlib.sha256).hexdigest() 
 

def check_result(result):
    pass
        
def get_verification():
    out={}
    global ACCESS_KEY
    out['access_key']=ACCESS_KEY
    out['nonce']=get_nonce()
    out['signature']=get_signature(out['nonce'])
    return out

def build_query(req={}):
    req.update(get_verification())
    post_data =  urllib.parse.urlencode(req)
    headers = {}
    headers['User-Agent'] = 'ApeGoxApi'
    return (post_data, headers)


def perform_query(url,data,headers={}):
    global URL
    url=URL+url
    try:
        requete = urllib.request.Request(url, data.encode(encoding='utf_8', errors='strict'), headers)
        reponse = urllib.request.urlopen(requete)
        return json.load(str(reponse))
    except Exception as e:
            print ('ERROR:' + str(Exception) + '---' + str(e)+"\n"+url+"\n"+data)
            
            
def perform_private(url,req={}):
    data, headers = build_query(req)
    return perform_query(url,data,headers)
    
def get_account_info():
    return perform_private('account');

def get_account_balance():
    return perform_private('currency_accounts')

def get_account_hashrate():
    return perform_private('hash_accounts')

def get_orders(cmi):
    param={'currency_market_id':cmi}
    return perform_private('orders/active',param)
    
def get_history(cmi,page=None,page_amount=None):
    param={'currency_market_id':cmi}
    if page is not None:param['page']=page
    if page_amount is not None:param['page_per_amount']=page_amount
    return perform_private('orders/history',param)
    
def create_order(cmi,amount,ppc,category):
    param={'currency_market_id':cmi}
    param['amount']=amount
    param['ppc']=ppc
    param['category']=category
    return perform_private('orders')
