# -*- coding:utf-8 -*-
"""
@Author  : xuxingchen
@Contact : xuxingchen@sinochem.com
@Desc    : 用于自动回复mqtt，用于测试模拟设备下发请求成功
"""
import json
import time

import paho.mqtt.client as mqtt
from utils import logger
from config import BROKER_HOST, BROKER_PORT, BROKER_USERNAME, BROKER_PASSWD


def on_connect(client, userdata, flags, rc):
    logger.Logger.debug(f"\033[1;32mAUTO CALLBACK\033[0m 🔗 Mqtt connection! {{rc: {rc}}} 🔗")
    client.subscribe("/jmlink/+/tml/service/call")


def on_disconnect(client, userdata, rc):
    logger.Logger.debug(f"\033[1;31mAUTO CALLBACK\033[0m 🔌 Break mqtt connection! {{rc: {rc}}} 🔌")


def on_message(client, userdata, message):
    logger.Logger.debug("\033[1;36mAUTO CALLBACK\033[0m <- 💡 接收到新数据，执行 on_message 中 ...")
    msg = json.loads(message.payload.decode().replace("\x00", ""))
    print(f"msg: {msg}")
    if "messageId" in msg.keys():
        topic = f"{message.topic}_resp"
        print(topic)
        auto_callback = {
            "messageId": msg["messageId"],
            "code": 0,
            "data": {
                "code": 0
            }
        }
        client.publish(topic, json.dumps(auto_callback))
        print(auto_callback)


client = mqtt.Client(client_id="auto_callback@python")
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_message = on_message
client.username_pw_set(BROKER_USERNAME, BROKER_PASSWD)
client.connect(BROKER_HOST, BROKER_PORT)
client.loop_start()

while True:
    time.sleep(86400)
