#DONATION 16RdQZ86NUWQbE6rM86JbxnnaCDcAKqa9

####HASHNET API HELPER####

#ver:1.2


# delete_all_orders funtion is wrong
#reply bad request!


#still missing error checking

from urllib import urlencode
import urllib2
import time
import hashlib
import hmac
import base64
import json
import os



class hashnest_connector:

 BASEURL='https://www.hashnest.com/api/'
 APIVERSION='v1'
 URL=BASEURL+APIVERSION+'/'

 CONNECTION_RETRY=3

 SELL='sale'
 BUY='purchase'
 
 logfile='/storage/emulated/0/logs/hashnestapilog.txt'
 
 def __init__(self,username,key,secret):
  self.username=username
  self.key=key
  self.secret=secret
  
 def printlog(self, nonce,url,r,data):
  try:
   f = open(self.logfile, 'a')
   f.write('['+str(nonce)+',"'+str(url)+'",'+str(r)+',"'+data+'"]'+"\n")
   f.close()
  except Exception,e:
     print "ERROR: can't write log file :" + str(Exception) + '---' + str(e)

 def get_nonce(self):
  return int(time.time()*100000);


 def check_result(self,result):
  pass

 def perform_private(self,url,req={}):
  nonce= self.get_nonce()
  message = str(nonce) + self.username + self.key
 
  req['access_key']=self.key
  req['nonce']=nonce
  req['signature']= hmac.new( self.secret, msg=message, digestmod=hashlib.sha256).hexdigest() 

  
  data = urlencode(req)
  headers = {'User-Agent':'ApeGoxApi'}
  
 
  url=self.URL+url
  
  for i in range(0,self.CONNECTION_RETRY):
   try:
    req = urllib2.Request(url, data, headers)
    res = urllib2.urlopen(req,data)
    r=res.read()
    self.printlog(nonce,url,r,data)
    return json.loads(r)
   
   except Exception,e:
    self.printlog(nonce,url,str(e),data)
    print 'ERROR:' +str(i+1)+'/'+str(self.CONNECTION_RETRY)+':' + str(Exception) + '---' + str(e)+"\n"+url+"\n"+data
    time.sleep(1)
  
 

 def get_account_info(self):
  return self.perform_private('account');

 def get_account_balance(self):
  return self.perform_private('currency_accounts')

 def get_account_hashrate(self):
  return self.perform_private('hash_accounts')

 def get_orders(self,cmi):
  param={'currency_market_id':cmi}
  return self.perform_private('orders/active',param)
    
 def get_history(self,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 self.perform_private('orders/history',param)
    
 def create_order(self,cmi,amount,ppc,category):
  param={'currency_market_id':cmi}
  param['amount']=amount
  param['ppc']=ppc
  param['category']=category
  return self.perform_private('orders',param)

 def delete_order(self,order_id):
  param={'order_id':order_id}
  return self.perform_private('orders/revoke',param)

 def delete_all_orders(self,cmi):
  param={'currency_market_id':cmi}
  return self.perform_private('orders/quick_revoke',param)
 
 def get_opened_markets(self):
  return self.perform_private('currency_markets')
 
 def get_currency_orders(self,cmi,category='sale'):
  param={'currency_market_id':cmi}
  param['category']=category 
  return self.perform_private('currency_markets/orders',param)
 
 def get_currency_trades(self,cmi):
  param={'currency_market_id':cmi}
  return self.perform_private('currency_markets/order_history',param)

