# from shutil import ExecError
import paho.mqtt.client as mqtt
import json
import connection
# import pushnotificationtopic
import sys

topic_subscribe_prefix = 'ACK/4617'
topic_publish_prefix   = 'REQ/4617'

SLOT_SWITCH_STATE = 0
SLOT_SWITCH_STATE = 'ON'
SLOT_SWITCH_TITLE = 'SWITCH 1'
SLOT_DEVICE_TITLE = ' 6Gang1 '


# Callback Function on Connection with MQTT Server
def on_connect(client, userdata, flags, rc):
    print ("Connected with Code :" +str(rc))
    # Subscribe Topic from here
    MQTT_Publish()

# Callback Function on Receiving the Subscribed Topic/Message
def on_message(client, userdata, msg):
    # print the message received from the subscribed topic
      print (str(msg.payload) )
  
def on_reconnect_callback():
    print("Reconnecting...")
        
def MQTT_Publish():
    # message = '{"DEVICE_ID":4596,"SWITCH":1,"STATE":1}'
    df = connection.run_query('''select  Users.ID as user_id , Spaces.ID as space_id, Devices.ID as device_id , Devices.Title  as device_title ,dev_acc_list.r_id as dev_ac, 
                                dev_acc_list.mod_acc_id as Acc_id,
                                dev_acc_list.user_def_title as dev_acc_title from Users 
                                left join Sites on Sites.UserID  = Users.ID 
                                left join Spaces  on Spaces.SiteID  = Sites.ID 
                                left join Devices on Devices.SpaceID = Spaces.ID
                                left join dev_acc_list on dev_acc_list.device_id = Devices.ID 
                                where Devices.Title = '6 gang' and dev_acc_list.user_def_title='Switch' ''')

    deviceId =  df.device_id
    AccID = df.Acc_id                             
    DEV_ID = int(deviceId)
    ACC_ID = int(AccID)
    ACC_STATE = 1
    payload = {}
    payload["DEVICE_ID"] = DEV_ID
    payload["SWITCH"] = ACC_ID
    payload["STATE"] = ACC_STATE
    message = json.dumps(payload)
    client.publish(topic_publish_prefix , bytearray(message, encoding='utf-8'))
    print(topic_publish_prefix)

def MQTT_Subscribe():
    client.subscribe(topic_subscribe_prefix)
    print(topic_subscribe_prefix)   

 
client = mqtt.Client()

client.on_connect = on_connect
client.on_message = on_message
client.MQTT_Publish = MQTT_Publish
client.MQTT_Subscribe = MQTT_Subscribe
client.on_reconnect_callback=on_reconnect_callback
client.connect('thingsaccess.com', 1883, 60)
client.loop_forever()







# if __name__=="__main__":
#           MQTT_Publish()  
  