#!/usr/bin/env python
#
# Autogenerated by Thrift Compiler (0.17.0)
#
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
#
#  options string: py:package_prefix=qutrunk.thrift.
#

import sys
import pprint
if sys.version_info[0] > 2:
    from urllib.parse import urlparse
else:
    from urlparse import urlparse
from thrift.transport import TTransport, TSocket, TSSLSocket, THttpClient
from thrift.protocol.TBinaryProtocol import TBinaryProtocol

from qusprout import QuSproutServer
from qusprout.ttypes import *

if len(sys.argv) <= 1 or sys.argv[1] == '--help':
    print('')
    print('Usage: ' + sys.argv[0] + ' [-h host[:port]] [-u url] [-f[ramed]] [-s[sl]] [-novalidate] [-ca_certs certs] [-keyfile keyfile] [-certfile certfile] function [arg1 [arg2...]]')
    print('')
    print('Functions:')
    print('  InitQubitsResp initQubits(InitQubitsReq req)')
    print('  SendCircuitCmdResp sendCircuitCmd(SendCircuitCmdReq req)')
    print('  CancelCmdResp cancelCmd(CancelCmdReq req)')
    print('  GetProbAmpResp getProbAmp(GetProbAmpReq req)')
    print('  GetProbOfAllOutcomResp getProbOfAllOutcome(GetProbOfAllOutcomReq req)')
    print('  GetAllStateResp getAllState(GetAllStateReq req)')
    print('  RunCircuitResp run(RunCircuitReq req)')
    print('  GetExpecPauliProdResp getExpecPauliProd(GetExpecPauliProdReq req)')
    print('  GetExpecPauliSumResp getExpecPauliSum(GetExpecPauliSumReq req)')
    print('')
    sys.exit(0)

pp = pprint.PrettyPrinter(indent=2)
host = 'localhost'
port = 9090
uri = ''
framed = False
ssl = False
validate = True
ca_certs = None
keyfile = None
certfile = None
http = False
argi = 1

if sys.argv[argi] == '-h':
    parts = sys.argv[argi + 1].split(':')
    host = parts[0]
    if len(parts) > 1:
        port = int(parts[1])
    argi += 2

if sys.argv[argi] == '-u':
    url = urlparse(sys.argv[argi + 1])
    parts = url[1].split(':')
    host = parts[0]
    if len(parts) > 1:
        port = int(parts[1])
    else:
        port = 80
    uri = url[2]
    if url[4]:
        uri += '?%s' % url[4]
    http = True
    argi += 2

if sys.argv[argi] == '-f' or sys.argv[argi] == '-framed':
    framed = True
    argi += 1

if sys.argv[argi] == '-s' or sys.argv[argi] == '-ssl':
    ssl = True
    argi += 1

if sys.argv[argi] == '-novalidate':
    validate = False
    argi += 1

if sys.argv[argi] == '-ca_certs':
    ca_certs = sys.argv[argi+1]
    argi += 2

if sys.argv[argi] == '-keyfile':
    keyfile = sys.argv[argi+1]
    argi += 2

if sys.argv[argi] == '-certfile':
    certfile = sys.argv[argi+1]
    argi += 2

cmd = sys.argv[argi]
args = sys.argv[argi + 1:]

if http:
    transport = THttpClient.THttpClient(host, port, uri)
else:
    if ssl:
        socket = TSSLSocket.TSSLSocket(host, port, validate=validate, ca_certs=ca_certs, keyfile=keyfile, certfile=certfile)
    else:
        socket = TSocket.TSocket(host, port)
    if framed:
        transport = TTransport.TFramedTransport(socket)
    else:
        transport = TTransport.TBufferedTransport(socket)
protocol = TBinaryProtocol(transport)
client = QuSproutServer.Client(protocol)
transport.open()

if cmd == 'initQubits':
    if len(args) != 1:
        print('initQubits requires 1 args')
        sys.exit(1)
    pp.pprint(client.initQubits(eval(args[0]),))

elif cmd == 'sendCircuitCmd':
    if len(args) != 1:
        print('sendCircuitCmd requires 1 args')
        sys.exit(1)
    pp.pprint(client.sendCircuitCmd(eval(args[0]),))

elif cmd == 'cancelCmd':
    if len(args) != 1:
        print('cancelCmd requires 1 args')
        sys.exit(1)
    pp.pprint(client.cancelCmd(eval(args[0]),))

elif cmd == 'getProbAmp':
    if len(args) != 1:
        print('getProbAmp requires 1 args')
        sys.exit(1)
    pp.pprint(client.getProbAmp(eval(args[0]),))

elif cmd == 'getProbOfAllOutcome':
    if len(args) != 1:
        print('getProbOfAllOutcome requires 1 args')
        sys.exit(1)
    pp.pprint(client.getProbOfAllOutcome(eval(args[0]),))

elif cmd == 'getAllState':
    if len(args) != 1:
        print('getAllState requires 1 args')
        sys.exit(1)
    pp.pprint(client.getAllState(eval(args[0]),))

elif cmd == 'run':
    if len(args) != 1:
        print('run requires 1 args')
        sys.exit(1)
    pp.pprint(client.run(eval(args[0]),))

elif cmd == 'getExpecPauliProd':
    if len(args) != 1:
        print('getExpecPauliProd requires 1 args')
        sys.exit(1)
    pp.pprint(client.getExpecPauliProd(eval(args[0]),))

elif cmd == 'getExpecPauliSum':
    if len(args) != 1:
        print('getExpecPauliSum requires 1 args')
        sys.exit(1)
    pp.pprint(client.getExpecPauliSum(eval(args[0]),))

else:
    print('Unrecognized method %s' % cmd)
    sys.exit(1)

transport.close()
