#!/usr/bin/python

import sys, getopt
sys.path.append('/usr/local/bin/thrift-ice-py')
from pprint import pprint
 
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):

  guid = ""   

  try:
    opts, args = getopt.getopt(sys.argv[1:],"hg:ls:jlc", ["help", "guid=", "list", "status=", "join", "leave", "update=", "create"])
  except getopt.GetoptError as err:
    print str(err)
    Usage()
    sys.exit(2)
  for opt, arg in opts:
    if opt in ("-l", "--list"):
       JOBgetlist()
       sys.exit()
    elif opt in ("-s", "--status"):
       JOBstatus(guid, arg)
       sys.exit()
    elif opt in ("-j", "--join"):
      JOBjoin(guid)
      sys.exit()
    elif opt in ("-l", "--leave"):
      JOBleave(guid)
      sys.exit()
    elif opt in ("-g", "--guid"):
      guid = arg     
    elif opt in ("-u", "--update"):
       JOBUPdateStatus(guid, arg)    
    elif opt in ("-c", "--create"):
       JOBCreate(guid)    
    else:
      Usage()
      sys.exit(2)

def JOBgetlist():
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()
 
    pprint(client.JOB_GetList())
 
    transport.close()
 
  except Thrift.TException, tx:
    print str(tx)

def JOBstatus(guid, status):
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()
 
    name = "JobName"
    print client.JOB_SendStatus(guid, name, status)
 
    transport.close()
 
  except Thrift.TException, tx:
    print str(tx)
    
def JOBjoin(guid):
  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.JOB_Join(guid)
 
    transport.close()
 
  except Thrift.TException, tx:
    print str(tx)


def JOBleave(guid):
  try:
    transport = TSocket.TSocket('127.0.0.1', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = Ice.Client(protocol)
    transport.open()
 
    DataGUID=""
    print client.JOB_Leave(guid, DataGUID)
 
    transport.close()
 
  except Thrift.TException, tx:
    print str(tx)

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

    sJobInfo = stJobComponentInfo()
    sJobInfo.sGUID=guid
    sJobInfo.sName="TestJOB"
    sJob.stJob=sJobInfo

    sGrowerInfo = stGrowerComponentInfo()
    sGrowerInfo.sGUID="578239d8-2149-47fb-a63c-43b482a25b61"
    sGrowerInfo.sName="Grower Name"
    sGrowerUserInfo = stJobUserInfo()
    sGrowerUserInfo.sAPIPartnerID = "Grower APIPartnerID"
    sGrowerUserInfo.sFirstName = "Grower FirstName"
    sGrowerUserInfo.sMiddleName = "Grower MiddleName"
    sGrowerUserInfo.sLastName = "Grower LastName"
    sGrowerUserInfo.sPhoneNumber = "Grower PhoneNumber"
    sGrowerUserInfo.sMobileNumber = "Grower MobileNumber"
    sGrowerUserInfo.sFaxNumber = "Grower FaxNumber"
    sGrowerUserInfo.sEmail = "Grower@email.com"  #must be valid email
    sGrowerUserInfo.sAddress = "Grower Address"
    sGrowerUserInfo.sAddress2 = "Grower Address2"
    sGrowerUserInfo.sCity = "Grower City"
    sGrowerUserInfo.sCounty = "Grower County"
    sGrowerUserInfo.sRegion = "Grower Region" 
    sGrowerUserInfo.sPostalCode = "Grower PC" #must be less than 10 chars
    sGrowerUserInfo.sCountry = "Grower Country"
    sGrowerUserInfo.sComments = "Grower Comments"
    sGrowerInfo.stUserInfo = sGrowerUserInfo
    sJob.stGrower=sGrowerInfo

    sFarmInfo = stFarmComponentInfo()
    sFarmInfo.sGUID="578239d8-2149-47fb-a63c-43b482a25b62"
    sFarmInfo.sName="Farm Name"
    sFarmUserInfo = stJobUserInfo()
    sFarmUserInfo.sAPIPartnerID = "Farm APIPartnerID"
    sFarmUserInfo.sFirstName = "Farm FirstName"
    sFarmUserInfo.sMiddleName = "Farm MiddleName"
    sFarmUserInfo.sLastName = "Farm LastName"
    sFarmUserInfo.sPhoneNumber = "Farm PhoneNumber"
    sFarmUserInfo.sMobileNumber = "Farm MobileNumber"
    sFarmUserInfo.sFaxNumber = "Farm FaxNumber"
    sFarmUserInfo.sEmail = "Farm@eMail.com" #must be valid email
    sFarmUserInfo.sAddress = "Farm Address"
    sFarmUserInfo.sAddress2 = "Farm Address2"
    sFarmUserInfo.sCity = "Farm City"
    sFarmUserInfo.sCounty = "Farm County"
    sFarmUserInfo.sRegion = "Farm Region"
    sFarmUserInfo.sPostalCode = "Farm PC" #must be less than 10 chars
    sFarmUserInfo.sCountry = "Farm Country"
    sFarmUserInfo.sComments = "Farm Comments"
    sFarmInfo.stUserInfo = sFarmUserInfo
    sJob.stFarm=sFarmInfo

    sFieldInfo = stFieldComponentInfo()
    sFieldInfo.sGUID="578239d8-2149-47fb-a63c-43b482a25b63"
    sFieldInfo.sName="Field Name"
    sFieldUserInfo = stJobUserInfo()
    sFieldUserInfo.sAPIPartnerID = "Field APIPartnerID"
    sFieldUserInfo.sFirstName = "Field FirstName"
    sFieldUserInfo.sMiddleName = "Field MiddleName"
    sFieldUserInfo.sLastName = "Field LastName"
    sFieldUserInfo.sPhoneNumber = "Field PhoneNumber"
    sFieldUserInfo.sMobileNumber = "Field MobileNumber"
    sFieldUserInfo.sFaxNumber = "Field FaxNumber"
    sFieldUserInfo.sEmail = "Field@eMail.com"  #must be valid email
    sFieldUserInfo.sAddress = "Field Address"
    sFieldUserInfo.sAddress2 = "Field Address2"
    sFieldUserInfo.sCity = "Field City"
    sFieldUserInfo.sCounty = "Field County"
    sFieldUserInfo.sRegion = "Field Region"
    sFieldUserInfo.sPostalCode = "Field PC" #must be less than 10 chars
    sFieldUserInfo.sCountry = "Field Country"
    sFieldUserInfo.sComments = "Field Comments"
    sFieldInfo.stUserInfo = sFieldUserInfo
    sJob.stField=sFieldInfo

    sProduct = stJobProductInfo()
    sProduct.mixDdi=1
    sProduct.productDdi=2
    sProduct.TargetRate=3.14
    sProduct.sGUID="GUID 1"
    sProduct.sName="Test Product 1"
    sProduct.sUnits="mm3/m2"

    sIngredientA = stIngredientInfo()
    sIngredientA.sGUID = "P186"
    sIngredientA.sName = "0-0-0-10 Cal-Serve"
    sIngredientA.ddi = 72
    sIngredientA.sUnits = "ml"
    sIngredientA.sAPIPartnerID="Raven"
 
    sIngredientB = stIngredientInfo()
    sIngredientB.sGUID = "P1"
    sIngredientB.sName = "0-0-50-175"
    sIngredientB.ddi = 72
    sIngredientB.sUnits = "g"
    sIngredientB.sAPIPartnerID = "RavenB"
    sProduct.stIngredients=[sIngredientA , sIngredientB]
   

    sProductB = stJobProductInfo()
    sProductB.sGUID="GUID 2"
    sProductB.sName="Test Product 2"
    sProductB.mixDdi=3
    sProductB.productDdi=4
    sProductB.sUnits="mm3/m2"
    sProductB.TargetRate=3.14

    sJob.stProducts = [sProduct, sProductB] 

    print client.JOB_CreateExt(sJob)
 
    transport.close()
 
  except Thrift.TException, tx:
    print str(tx)

def Usage():
    print 'ice-job --guid=[ID] [option]'
    print '   --list            List all jobs available'
    print '   --status=[STATUS] Set Status of job (requires GUID)'
    print '   --join            Join job (requires GUID)'
    print '   --leave           Leave job (requires GUID)'
    print '   --create          Create test job (requires GUID)'

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