#ifndef __CLOUD_CONN_COMMON_H
#define __CLOUD_CONN_COMMON_H

/***************HEADER FILES****************/
#include <string.h>
#include <syslog.h>
#include "mqtt_session.h"
#include "dy_utils/dy_common.h"
#include "dy_utils/dy_db.h"
#include "dy_utils/dy_ipc.h"
#include "dy_utils/led.h"
#include "lnxall_list.h"
#include "dy_utils/kv_array.h"
/******************************************/

#define DATA_REPORT_DB_NAME "/app/dayun_report.db"
#define GATEWAY_RUN_MODE_CFG_FILE   "/app/config/run_mode"

#define TOPIC_EVT_HEARTBEAT     "Evt_HeartBeat"
#define TOPIC_RSP_HEARTBEAT     "Rsp_HeartBeat"
#define TOPIC_LOGIN             "LogIn"
#define TOPIC_RSP_LOGIN         "Rsp_LogIn"
#define TOPIC_SET_SERVERREDIRECT  "Set_ServerRedirect"

#define TOPIC_GET_RTC        "Get_RTC"
#define TOPIC_RSP_GETRTC     "Rsp_GetRTC"

#define TOPIC_SET_RUNMODECFG "Set_RunModeCfg"
#define TOPIC_GET_RUNMODECFG  "Get_RunModeCfg"
#define TOPIC_RSP_RUNMODECFG  "Rsp_RunModeCfg"

#define TOPIC_GW_REBOOT "Set_GWRst"

#define EN_3RD_RTU

typedef enum _RUN_MODE_E
{
	RUN_MODE_UNREGISTERED = 0,    //未注册
	RUN_MODE_REGISTERED,    //已注册
} RUN_MODE_E;

typedef enum _COMM_STATUS_E
{
	COMM_STATUS_IDLE = 0,    //未连接
	COMM_STATUS_CONNECTING,              //连接中
	COMM_STATUS_CONNECTED,               //已连接
	COMM_STATUS_LOGIN,                    //已经登录
} COMM_STATUS_E;


typedef struct  {
    char* path;
    struct list_head list;
}list_pic_path;

typedef struct _cloud_conn_var_s
{
	mqtt_session_t* session_cloud; //外部broker的MQTT client，用于连接云平台
	ipc_session_t* session; //内部broker的MQTT client，用于进程间通信
	nodes_cfg_table_t* nodes_cfg_table; //节点信息
	char sn_str[SN_MAX_LEN];
    char sta_name_str[64];
	char proc_name[PROGRAM_NAME_LEN];
	COMM_STATUS_E comm_status;
	int status_timer;
	int report_timer;
	unsigned int heart_beat_lost_cnt;
    int hb_preiod;
    int rd_preiod;
	unsigned char using_default_server;
    kv_array_t converge_value;
	struct list_head l_path;
	pthread_mutex_t mx_path;
} cloud_conn_var_t;

//上位机命令和模块命令转换
typedef struct _host_cmd_s
{
	char* topic;
	int host_cmd;
	char* ipc_topic;
} host_cmd_t;

extern pthread_mutex_t mx_path;
extern int comm_status_poll(cloud_conn_var_t* var);
int cloud_conn_mqtt_init(cloud_conn_var_t* var);
int cloud_conn_internal_mqtt_init(cloud_conn_var_t* var);
int recv_host_msg(void* obj, mqtt_message_t* mqtt_msg);
void refuse_master_server(cloud_conn_var_t* var);
int data_report_poll(cloud_conn_var_t* var);
RUN_MODE_E get_gateway_run_mode();
char *get_sensor_alarm(cloud_conn_var_t *var);
char *get_sensor_value(cloud_conn_var_t *var);
char *get_3rd_rtu_value(cloud_conn_var_t *var);
void effect_limit_config(cloud_conn_var_t *var,char *str);
#endif /* __CLOUD_CONN_COMMON_H */
