#ifndef __CLOUD_CONN_COMMON_H
#define __CLOUD_CONN_COMMON_H

/***************HEADER FILES****************/
#include <string.h>
#include <syslog.h>
#include "ipc_session.h"
#include "lnxall_list.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 "mqtt_session.h"
/******************************************/

#define GATEWAY_RUN_MODE_CFG_FILE   "/app/config/run_mode"

#define TOPIC_EVT_HEARTBEAT     "HeartBeat"
#define TOPIC_RSP_HEARTBEAT     "HeartBeat"
#define TOPIC_LOGIN             "LogIn"
#define TOPIC_RSP_LOGIN         "LogIn"


#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 TOPIC_GW_LOGOUT "remove"


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 enum
{
	LOGIN_PASS = 0,
	LOGIN_REFUSE = 501,
} login_result_code;

typedef struct
{
	int serial_num;
	time_t timestamp;
    RUN_MODE_E run_mode;
	login_result_code error_code;
    char product_name[PRODUCT_NAME_LEN];
} login_info_t;

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 proc_name[PROGRAM_NAME_LEN];
	COMM_STATUS_E comm_status;
	int status_timer;
	int report_timer;
	unsigned int heart_beat_lost_cnt;
	unsigned int serial_number;
	unsigned char using_default_server;
	int heartbeat_interval;
	int login_interval;
    char product_name[PRODUCT_NAME_LEN];
} cloud_conn_var_t;

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

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();
void gateway_login_msg(cloud_conn_var_t *var);
#endif /* __CLOUD_CONN_COMMON_H */
