#!/usr/bin/python

import sys, getopt
sys.path.append('/usr/local/bin/thrift-ice-py')

from ice import Ice
from ice.ttypes import *

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol

def main(argv):
  try:
    opts, args = getopt.getopt(sys.argv[1:],"hd:fselr:p:e:", ["help", "devicename=", "status", "features", "eula", "list", "request=", "provision=", "requestService=", "getService=", "errors="])
  except getopt.GetoptError as err:
    print str(err)
    Usage()
    sys.exit(2)
  for opt, arg in opts:
    if opt in ("-d", "--devicename"):
      MGTSetDeviceName(arg)
      sys.exit()
    elif opt in ("-s", "--status"):
      MGTGetStatus()
      sys.exit()
    elif opt in ("-f", "--features"):
      MGTGetFeatureList()
      sys.exit()
    elif opt in ("-e", "--eula"):
      MGTAcceptEula()
      sys.exit()

    elif opt in ("-l", "--list"):
      MGTListProvisions()
      sys.exit()
    elif opt in ("-r", "--request"):
      MGTRequestProvision(arg)
      sys.exit()
    elif opt in ("-p", "--provision"):
      MGTGetProvision(arg)
      sys.exit()
    elif opt == "--requestService":
      MGTRequestService(arg)
      sys.exit()
    elif opt == "--getService":
      MGTGetService(arg)
      sys.exit()
    elif opt in ("-e", "--errors"):
      MGTGetErrors(arg)
      sys.exit()
    elif opt in ("-h", "--help"):
      Usage()
      sys.exit()
    else:
      Usage()
      sys.exit(2)


def MGTRequestProvision(arg):
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()

    print client.MGT_ProvisionRequest(arg)

    transport.close()

  except Thrift.TException, tx:
    print str(tx)


def MGTListProvisions():
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()

    print client.MGT_GetProvisionList()

    transport.close()

  except Thrift.TException, tx:
    print str(tx)


def MGTGetProvision(arg):
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()

    print client.MGT_GetProvision(arg)

    transport.close()

  except Thrift.TException, tx:
    print str(tx)

def MGTSetDeviceName(arg):
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()

    print client.SetSlingshotName(arg)

    transport.close()

  except Thrift.TException, tx:
    print str(tx)

def MGTGetErrors(arg):
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()

    print client.MGT_GetErrors(int(arg))

    transport.close()

  except Thrift.TException, tx:
    print str(tx)

def MGTGetFeatureList():
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()

    print("eMGTFeature")
    print("\tMANAGEMENT = 0")
    print("\tFILETRANSFER = 1")
    print("\tRTK = 2")
    print("\tREMOTESUPPORT = 3")
    print("\tFLEETVIEW = 4")
    print("\tSYSTEM = 5")
    print("\tOTA = 6")
    print("\tTELEMATICS = 7")
    print("\tSSH = 8")
    print("\tINTERNETACCESS = 9")
    print("\tNET = 10")
    print("\tJOB = 11")
    print("\tREALTIMECANMONITOR = 256")
    print("\tWORKORDERS = 257")
    print("\tM2M = 258")
    print("\tBASESTATION = 259")
    print("\tVERBOSE_LOGGING = 260")
    print("\tAUTOCART_GUIDANCE = 261")
    print("\tDOT_GUIDANCE = 262")
    print("\tAUTONOMOUS_COVERAGE = 263")
    print("\tVIRTUAL_THUMBDRIVE = 264")

    print client.MGT_GetFeatureList()

    transport.close()

  except Thrift.TException, tx:
    print str(tx)

def MGTGetStatus():
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()

    sys.stdout.write('Owner:\t\t')
    print client.getSlingshotOwner()

    sys.stdout.write('OwnerID:\t\t')
    print client.getSlingshotOwnerId()

    sys.stdout.write('SystemName:\t')
    print client.getSlingshotSystemName()

    sys.stdout.write('DeviceName:\t')
    print client.getSlingshotName()

    sys.stdout.write('EULA:\t\t')
    print client.getEULAVersion()

    sys.stdout.write('UUID:\t\t')
    print client.getSlingshotUUID()

    sys.stdout.write('Connected:\t')
    print client.getSlingshotConnectionStatus()

    print client.MGT_GetStatus()

    transport.close()

  except Thrift.TException, tx:
    print str(tx)

def MGTAcceptEula():
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()

    print client.acceptEULA(eEULAAcceptType.TEMPORARY)

    transport.close()

  except Thrift.TException, tx:
    print str(tx)

def MGTRequestService(args):
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()

    request = args.split(",")
    print "Requesting ", request[0], ", version ", request[1]

    print client.MGT_ServiceDiscoveryRequest(request[0], request[1])

    transport.close()

  except Thrift.TException, tx:
    print str(tx)

def MGTGetService(args):
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()

    print "Getting response for correlation id: ", args

    print client.MGT_GetServiceDiscoveryResult(args)

    transport.close()

  except Thrift.TException, tx:
    print str(tx)

def Usage():
  print 'ice-mgt [option]'
  print '   --devicename=[name]                     Sets Nickname on portal'
  print '   --status                                Management status info'
  print '   --features                              List of feature/states'
  print '   --eula                                  Accept EULA Temporarily'
  print '   --list                                  List of provisions'
  print '   --request=[type]                        Request Provision type'
  print '   --provision=[type]                      Get Provision type'
  print '   --requestService=[service,version]      Request service'
  print '   --getService=[correlation_id]           Get service previously requested'
  print '   --errors=[start index]                  Get Error List'

if __name__ == "__main__":
  main(sys.argv[1:])
