import json
from paho.mqtt import client as mqtt_client

broker = 'emerson-mqtt-internal-ipc'
port = 1883
topic_rcv = "python_test"
topic_send = "python_response"
client_id = 'emerson_my_python'

def connect_mqtt() -> mqtt_client:
	def on_connect(client, userdata, flags, rc):
		if rc == 0:
			print("Connected to MQTT Broker!")
		else:
			print("Failed to connect to MQTT Broker, return code %d\n", rc)

	client = mqtt_client.Client(client_id)
	# client.username_pw_set(username, password)
	client.on_connect = on_connect
	client.connect(broker, port)
	return client


def subscribe(client: mqtt_client):
	def on_message(client, userdata, msg):
    
        # Process received MQTT message
		rcv_topic = msg.topic
		rcv_mqtt_msg = str(msg.payload.decode("utf-8","ignore"))
		print("data Received",rcv_mqtt_msg)
		m_in=json.loads(rcv_mqtt_msg)
		
        # Send MQTT Response
		resp_m = {}
		resp_m["Python Response"] = "Up and Running"
		resp_msg = json.dumps(resp_m)
		result = client.publish(topic_send, resp_msg)
		status = result[0]
		if status == 0:
			print(f"Send `{resp_msg}` to topic `{topic_send}`")
		else:
			print(f"Failed to send message to topic {topic_send}")
		
		
	client.subscribe(topic_rcv)
	client.on_message = on_message

# Connect to MQTT Broker and subscribe to a topic	
client = connect_mqtt()
subscribe(client)
client.loop_forever()