from jsonrpc import ServiceProxy
import sys
import string

# ===== BEGIN USER SETTINGS =====
# if you do not set these you will be prompted for a password for every command
rpcuser = ""
rpcpass = ""
# ====== END USER SETTINGS ======


if rpcpass == "":
	access = ServiceProxy("http://127.0.0.1:9332")
else:
	access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:9332")
cmd = sys.argv[1].lower()

if cmd == "backupwallet":
	try:
		path = raw_input("Enter destination path/filename: ")
		print access.backupwallet(path)
	except:
		print "\n---An error occurred---\n"

elif cmd == "getaccount":
	try:
		addr = raw_input("Enter a Bitcoin address: ")
		print access.getaccount(addr)
	except:
		print "\n---An error occurred---\n"

elif cmd == "getaccountaddress":
	try:
		acct = raw_input("Enter an account name: ")
		print access.getaccountaddress(acct)
	except:
		print "\n---An error occurred---\n"

elif cmd == "getaddressesbyaccount":
	try:
		acct = raw_input("Enter an account name: ")
		print access.getaddressesbyaccount(acct)
	except:
		print "\n---An error occurred---\n"

elif cmd == "getbalance":
	try:
		acct = raw_input("Enter an account (optional): ")
		mc = raw_input("Minimum confirmations (optional): ")
		try:
			print access.getbalance(acct, mc)
		except:
			print access.getbalance()
	except:
		print "\n---An error occurred---\n"

elif cmd == "getblockbycount":
	try:
		height = raw_input("Height: ")
		print access.getblockbycount(height)
	except:
		print "\n---An error occurred---\n"

elif cmd == "getblockcount":
	try:
		print access.getblockcount()
	except:
		print "\n---An error occurred---\n"

elif cmd == "getblocknumber":
	try:
		print access.getblocknumber()
	except:
		print "\n---An error occurred---\n"

elif cmd == "getconnectioncount":
	try:
		print access.getconnectioncount()
	except:
		print "\n---An error occurred---\n"

elif cmd == "getdifficulty":
	try:
		print access.getdifficulty()
	except:
		print "\n---An error occurred---\n"

elif cmd == "getgenerate":
	try:
		print access.getgenerate()
	except:
		print "\n---An error occurred---\n"

elif cmd == "gethashespersec":
	try:
		print access.gethashespersec()
	except:
		print "\n---An error occurred---\n"

elif cmd == "getinfo":
	try:
		print access.getinfo()
	except:
		print "\n---An error occurred---\n"

elif cmd == "getnewaddress":
	try:
		acct = raw_input("Enter an account name: ")
		try:
			print access.getnewaddress(acct)
		except:
			print access.getnewaddress()
	except:
		print "\n---An error occurred---\n"

elif cmd == "getreceivedbyaccount":
	try:
		acct = raw_input("Enter an account (optional): ")
		mc = raw_input("Minimum confirmations (optional): ")
		try:
			print access.getreceivedbyaccount(acct, mc)
		except:
			print access.getreceivedbyaccount()
	except:
		print "\n---An error occurred---\n"

elif cmd == "getreceivedbyaddress":
	try:
		addr = raw_input("Enter a Bitcoin address (optional): ")
		mc = raw_input("Minimum confirmations (optional): ")
		try:
			print access.getreceivedbyaddress(addr, mc)
		except:
			print access.getreceivedbyaddress()
	except:
		print "\n---An error occurred---\n"

elif cmd == "gettransaction":
	try:
		txid = raw_input("Enter a transaction ID: ")
		print access.gettransaction(txid)
	except:
		print "\n---An error occurred---\n"

elif cmd == "getwork":
	try:
		data = raw_input("Data (optional): ")
		try:
			print access.gettransaction(data)
		except:
			print access.gettransaction()
	except:
		print "\n---An error occurred---\n"

elif cmd == "help":
	try:
		cmd = raw_input("Command (optional): ")
		try:
			print access.help(cmd)
		except:
			print access.help()
	except:
		print "\n---An error occurred---\n"

elif cmd == "listaccounts":
	try:
		mc = raw_input("Minimum confirmations (optional): ")
		try:
			print access.listaccounts(mc)
		except:
			print access.listaccounts()
	except:
		print "\n---An error occurred---\n"

elif cmd == "listreceivedbyaccount":
	try:
		mc = raw_input("Minimum confirmations (optional): ")
		incemp = raw_input("Include empty? (true/false, optional): ")
		try:
			print access.listreceivedbyaccount(mc, incemp)
		except:
			print access.listreceivedbyaccount()
	except:
		print "\n---An error occurred---\n"

elif cmd == "listreceivedbyaddress":
	try:
		mc = raw_input("Minimum confirmations (optional): ")
		incemp = raw_input("Include empty? (true/false, optional): ")
		try:
			print access.listreceivedbyaddress(mc, incemp)
		except:
			print access.listreceivedbyaddress()
	except:
		print "\n---An error occurred---\n"

elif cmd == "listtransactions":
	try:
		acct = raw_input("Account (optional): ")
		count = raw_input("Number of transactions (optional): ")
		frm = raw_input("Skip (optional):")
		try:
			print access.listtransactions(acct, count, frm)
		except:
			print access.listtransactions()
	except:
		print "\n---An error occurred---\n"

elif cmd == "move":
	try:
		frm = raw_input("From: ")
		to = raw_input("To: ")
		amt = raw_input("Amount:")
		mc = raw_input("Minimum confirmations (optional): ")
		comment = raw_input("Comment (optional): ")
		try:
			print access.move(frm, to, amt, mc, comment)
		except:
			print access.move(frm, to, amt)
	except:
		print "\n---An error occurred---\n"

elif cmd == "sendfrom":
	try:
		frm = raw_input("From: ")
		to = raw_input("To: ")
		amt = raw_input("Amount:")
		mc = raw_input("Minimum confirmations (optional): ")
		comment = raw_input("Comment (optional): ")
		commentto = raw_input("Comment-to (optional): ")
		try:
			print access.sendfrom(frm, to, amt, mc, comment, commentto)
		except:
			print access.sendfrom(frm, to, amt)
	except:
		print "\n---An error occurred---\n"

elif cmd == "sendmany":
	try:
		frm = raw_input("From: ")
		to = raw_input("To (in format address1:amount1,address2:amount2,...): ")
		mc = raw_input("Minimum confirmations (optional): ")
		comment = raw_input("Comment (optional): ")
		try:
			print access.sendmany(frm,to,mc,comment)
		except:
			print access.sendmany(frm,to)
	except:
		print "\n---An error occurred---\n"

elif cmd == "sendtoaddress":
	try:
		to = raw_input("To (in format address1:amount1,address2:amount2,...): ")
		amt = raw_input("Amount:")
		comment = raw_input("Comment (optional): ")
		commentto = raw_input("Comment-to (optional): ")
		try:
			print access.sendtoaddress(to,amt,comment,commentto)
		except:
			print access.sendtoaddress(to,amt)
	except:
		print "\n---An error occurred---\n"

elif cmd == "setaccount":
	try:
		addr = raw_input("Address: ")
		acct = raw_input("Account:")
		print access.setaccount(addr,acct)
	except:
		print "\n---An error occurred---\n"

elif cmd == "setgenerate":
	try:
		gen= raw_input("Generate? (true/false): ")
		cpus = raw_input("Max processors/cores (-1 for unlimited, optional):")
		try:
			print access.setgenerate(gen, cpus)
		except:
			print access.setgenerate(gen)
	except:
		print "\n---An error occurred---\n"

elif cmd == "settxfee":
	try:
		amt = raw_input("Amount:")
		print access.settxfee(amt)
	except:
		print "\n---An error occurred---\n"

elif cmd == "stop":
	try:
		print access.stop()
	except:
		print "\n---An error occurred---\n"

elif cmd == "validateaddress":
	try:
		addr = raw_input("Address: ")
		print access.validateaddress(addr)
	except:
		print "\n---An error occurred---\n"

elif cmd == "walletpassphrase":
	try:
		pwd = raw_input("Enter wallet passphrase: ")
		access.walletpassphrase(pwd, 60)
		print "\n---Wallet unlocked---\n"
	except:
		print "\n---An error occurred---\n"

elif cmd == "walletpassphrasechange":
	try:
		pwd = raw_input("Enter old wallet passphrase: ")
		pwd2 = raw_input("Enter new wallet passphrase: ")
		access.walletpassphrasechange(pwd, pwd2)
		print
		print "\n---Passphrase changed---\n"
	except:
		print
		print "\n---An error occurred---\n"
		print

else:
	print "Command not found or not supported"
