#ifndef BMSER_TRANS_JUDGER_H
#define BMSER_TRANS_JUDGER_H

#include "bmser_msg_ring.h"
#include "parse_cfg.h"
#include "tunnel_manager.h"

typedef struct _BMSER_TRANS_JUDGER_S* BMSER_TRANS_JUDGER_S;

typedef enum {
    BMSER_MQTT_CONNECTION_LOCALHOST,    // 用于和localhost通信
    BMSER_MQTT_CONNECTION_REMOTEHOST,   // 用于和指定的ip主机通信
} BMSER_MQTT_CONNECTION_TYPE_E;

/**@brief          收到MQTT消息之后，judger发送给通道前需要做的操作
 * @param[in]      用户传参
 * @return         执行结果
 * @retval         0：成功；！0：失败
 * @par            修改日志:
 * <table>
 * <tr><th>Date			<th>Version	<th>Author	<th>Description
 * <tr><td>2024/03/15	<td>1.0		<td>mxg		<td>创建初始版本
 * </table>
 */
int TunnelProcess(void *arg);

/**@brief          获取主站通道，主要用于IPC消息发给trans的时候找到主站通道进行发送
 * @param[in]      bcuID        bcuID
 * @return         
 * @retval         主站通道
 * @par            修改日志:
 * <table>
 * <tr><th>Date			<th>Version	<th>Author	<th>Description
 * <tr><td>2024/03/05	<td>1.0		<td>mxg		<td>创建初始版本
 * </table>
 */
BMSER_TRANS_COMM_TUNNEL_S GetMasterTunnel(int bcuID);

/**@brief          直接返回专门和BAU内的MCU进行通信的通道
 * @return         
 * @retval         主站通道
 * @par            修改日志:
 * <table>
 * <tr><th>Date			<th>Version	<th>Author	<th>Description
 * <tr><td>2024/03/05	<td>1.0		<td>mxg		<td>创建初始版本
 * </table>
 */
BMSER_TRANS_COMM_TUNNEL_S GetMcuInBAUTunnel();

int ProcessBroadcastMsg(struct BMSER_TRANS_MSG_S *pMsg);
int SendMsgToRetryThread(struct BMSER_TRANS_MSG_S *pMsg, BMSER_MQTT_CONNECTION_TYPE_E mqtt_conn_type, uint16_t bankId);
int Judger_Init();
int Judger_Start();


#endif  // BMSER_TRANS_JUDGER_H

