#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>

#include "mqtt_session.h"
#include "dy_utils/dy_common.h"
#include "common.h"
#include "dy_utils/cJSON.h"


static int external_mqtt_state_change(void *obj, int state)
{
    lanzhuo_var_t *var = (lanzhuo_var_t *)obj;

    if (state == MQTT_CONNECTED)
    {
        // 刚刚连接建立起来
        char topic[TOPIC_MAX_LEN] = {0};

        snprintf(topic, TOPIC_MAX_LEN, "/%s/%s/%s/%s/%s", var->token, var->ep_id, var->ep_name, "metatag", "retain");
        mqtt_session_publish_with_flag(var->session_ext, topic, var->meta_tag_buf, var->meta_tag_buf_len, 0, true);
    }
}


static void external_subscribe_all(lanzhuo_var_t *var)
{
    char topic[TOPIC_MAX_LEN];

    // /86efdf12-4f54-4691-b833-09cbaa2d50a4/dev1234/test/metatag/push
    snprintf(topic, TOPIC_MAX_LEN, "/%s/%s/%s/#", var->token, var->ep_id, var->ep_name);
    mqtt_session_subscribe(var->session_ext, topic);

}

// 建立与broker之间的MQTT连接
int external_client_init(lanzhuo_var_t *var)
{
    mqtt_session_set_opts(var->session_ext, DEFAULT_QOS, KEEPALIVEINTERVAL);
    mqtt_session_set_callbacks(var->session_ext, external_mqtt_handle_recv_msg, external_mqtt_state_change);

    mqtt_session_start(var->session_ext);
    external_subscribe_all(var);
}

