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

import sys
import pprint
from urlparse import urlparse
from thrift.transport import TTransport
from thrift.transport import TSocket
from thrift.transport import TSSLSocket
from thrift.transport import THttpClient
from thrift.protocol import TBinaryProtocol

from producerProxy import ProducerService
from producerProxy.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]] function [arg1 [arg2...]]')
  print('')
  print('Functions:')
  print('  Result sendSync(Message message, i64 timeout)')
  print('  Result sendBatchSync( messages)')
  print('  Result sendAsync(Message message)')
  print('  Result sendNotifySync(Notify notify, i64 timeout)')
  print('  Result sendNotifyAsync(Notify notify)')
  print('')
  sys.exit(0)

pp = pprint.PrettyPrinter(indent = 2)
host = 'localhost'
port = 9090
uri = ''
framed = False
ssl = False
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

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

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

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

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

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

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

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

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

transport.close()
