#include <stdio.h>
#include <stdlib.h>

#include "ipc_session.h"
#include "dy_utils/dy_common.h"
#include "common.h"
#include "dy_utils/dy_ipc.h"

void internal_mqtt_subscribe_all(tianhang_var_t *var)
{
    ipc_session_t *ipc_session = var->session_int;
    char topic[TOPIC_MAX_LEN] = {0};

    snprintf(topic, TOPIC_MAX_LEN, "+/+/COV");
    ipc_session_subscribe(ipc_session, topic);
}

static int forward_data_to_external(tianhang_var_t *var, ipc_msg_t *mqtt_msg)
{
    int ret = 0;
    mqtt_session_publish(var->session_ext, mqtt_msg->topic, mqtt_msg->payload, strlen(mqtt_msg->payload));
    return ret;
}

static int internal_mqtt_handle_recv_msg(void *obj, ipc_msg_t *mqtt_msg)
{
    tianhang_var_t *var = (tianhang_var_t *)obj;
    dy_syslog(LOG_DEBUG, " Internal MQTT received topic:%s payload length:%d", mqtt_msg->topic, mqtt_msg->payloadLen);

    forward_data_to_external(var, mqtt_msg);
}

// 建立与内部broker之间的MQTT连接
int internal_client_init(tianhang_var_t *var)
{
    char clientId[MAX_CLIENT_ID_LEN] = {0};

    snprintf(clientId, MAX_CLIENT_ID_LEN, "tianhang_int_%s", var->sn_str);
    var->session_int = ipc_session_new(clientId, (void*)var, IPC_DEFAULT);
    if (var->session_int == NULL)
        return -1;

    ipc_session_set_callbacks(var->session_int, internal_mqtt_handle_recv_msg, NULL);
    internal_mqtt_subscribe_all(var);
    ipc_session_start(var->session_int);
}
