#DONATION 16RdQZ86NUWQbE6rM86JbxnnaCDcAKqa9

####HASHNET API HELPER####


from urllib import urlencode
import urllib2
import time
from datetime import datetime
import hashlib
import hmac
import base64
import json

import hashnest_auth

BASEURL='https://www.hashnest.com/api/'
APIVERSION='v1'
URL=BASEURL+APIVERSION+'/'

SELL='sale'
BUY='purchase'

def get_nonce():
 return int(time.time()*100000);


def check_result(result):
 pass
		
def get_verification():
 out={}
 nonce= get_nonce()
 message = str(nonce) + hashnest_auth.USERNAME + hashnest_auth.ACCESS_KEY
 
 out['access_key']=hashnest_auth.ACCESS_KEY
 out['nonce']=nonce
 out['signature']= hmac.new( hashnest_auth.SECRET_KEY, msg=message, digestmod=hashlib.sha256).hexdigest() 

 return out

def build_query(req={}):
	req.update(get_verification())
	post_data = urlencode(req)
	headers = {}
	headers['User-Agent'] = 'ApeGoxApi'
	return (post_data, headers)


def perform_query(url,data,headers={}):
 global URL
 url=URL+url
 print url
 print data
 count=0
 while True:
  if count==3: exit(0)
  count+=1
  try:
   req = urllib2.Request(url, data, headers)
   res = urllib2.urlopen(req,data)
   return json.load(res)
  except Exception,e:
			print 'ERROR:' + str(Exception) + '---' + str(e)+"\n"+url+"\n"+data
			time.sleep(1)
			
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')

def cancel_order(order_id):
 param={'order_id':order_id}
 return perform_private('orders/revoke')

def cancell_all_orders(cmi):
 param={'currency_market_id':cmi}
 return perform_private('orders/quick_revoke',param)
 
def get_opened_markets():
 return perform_private('currency_markets')
 
def get_currency_orders(cmi):
 param={'currency_market_id':cmi}
 
 return perform_private('currency_markets/orders',param)
 
def get_currency_trades(cmi):
 param={'currency_market_id':cmi}
 return perform_private('currency_markets/order_history',param)

