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

#include "ipc_session.h"
#include "dy_utils/dy_common.h"
#include "dy_utils/dy_ipc.h"
#include "cloud_conn_common.h"
#include "dy_utils/protocol.h"
#include "dy_utils/dy_pp.h"


static void cloud_conn_in_subscribe_all(cloud_conn_var_t *var)
{
    ipc_session_t *ipc_session = var->session;
    char topic[TOPIC_MAX_LEN] = {0};

    // 网关配置通道
    // M/[GW SN]/gateway/device/[GW SN]/service/Set_ServerRedirect
    sprintf(topic, "G/+/%s/device/%s/service/#", TOPIC_GATEWAY_CONFIG, var->sn_str);
    ipc_session_subscribe(ipc_session, topic);
}

static int cloud_conn_internal_mqtt_handle_recv_msg(void *obj, ipc_msg_t *mqtt_msg)
{
    cloud_conn_var_t *var = (cloud_conn_var_t *)obj;

	if(!strstr(mqtt_msg->topic, TOPIC_REPORT_DEBUG_INFO))
    	dy_syslog(LOG_DEBUG, "Internal mqtt received MQTT topic:%s payload length:%d",
              	mqtt_msg->topic, mqtt_msg->payloadLen);

    mqtt_session_publish(var->session_cloud, mqtt_msg->topic, mqtt_msg->payload, strlen(mqtt_msg->payload));

    return 0;
}

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

    snprintf(clientId, sizeof(clientId), "INT_DY_CLD_%s", var->sn_str);
    var->session = ipc_session_new(clientId, (void*)var, IPC_DEFAULT);
    if (var->session == NULL) return -1;
    ipc_session_set_callbacks(var->session, cloud_conn_internal_mqtt_handle_recv_msg, NULL);
    cloud_conn_in_subscribe_all(var);
    ipc_session_start(var->session);
	return 0;
}
