#ifndef _CUTOFPOINT_CONFIG_DATA_MANAGE_H_
#define _CUTOFPOINT_CONFIG_DATA_MANAGE_H_

#include "CutoffPointDefine.h"
#include "LinkConfigDataManage.h"
#include "../System/SystemParameterManage.h"

#ifdef __cplusplus
extern "C" {
#endif

	typedef struct S_CutoffPointConfigDataStruct
	{
		UINT16 wPointId;			/* 分界点ID */
		UINT16 wLinkId;				/* 分界点所处link */
		UINT32 dwOffset;			/* 分界点所处link偏移量 */
		UINT16 wLocalTiocId;		/* 本方TiocID*/
		UINT16 wOtherTiocId;			/* 相邻TIOC编号 */
		UINT8 chLocDir;				/* 本TIOC处于分界点的逻辑方向 */
		UINT16 wInFirstLink;		/* 分界点内方第一link */
		UINT16 wRelAdjacentRcSignalId;		/* 分界点关联的相邻RC的信号机ID */
	}CfpConfigStru;

	/*全局变量声明*/
	extern CfpConfigStru g_szCfpConfig[CUTOFF_POINT_SUM_MAX];	/* 分界点配置数据存放数组 */
	extern UINT16 gszCfpId[CUTOFF_POINT_SUM_MAX];
	extern UINT16 gCfpConfigSum;									/* 分界点配置个数 */

	/**
	* @brief 获取本TIOC分界点总数
	* @param 无
	* @return 本TIOC分界点总数
	*/
	extern UINT16 GetCfpSum(void);

	/**
	* @brief 获取分界点ID
	* @param bufIndex ID下标
	* @return 分界点ID
	*/
	extern UINT16 GetCfpId(const UINT16 bufIndex);

	/**
	* @brief 获取分界点存储指针
	* @param 无
	* @return 分界点存储指针
	*/
	extern CfpConfigStru * GetCfpConfigData(void);

	/**
	* @brief 获取分界点存储索引
	* @param wCfpId 分界点ID
	* @return 分界点存储索引
	*/
	extern UINT16 GetCfpBufIndex(const UINT16 wCfpId);

	/**
	* @brief 获取分界点所处link
	* @param wCfpId 分界点ID
	* @return 分界点所处link
	*/
	extern UINT16 GetCfpLink(const UINT16 wCfpId);

	/**
	* @brief 获取分界点所处link偏移量
	* @param wCfpId 分界点ID
	* @return 分界点存储所处link偏移量
	*/
	extern UINT32 GetCfpOffset(const UINT16 wCfpId);

	/**
	* @brief 获取分界点相邻TIOC编号
	* @param wCfpId 分界点ID
	* @return 分界点相邻TIOC编号
	*/
	extern UINT16 GetCfpOtherTioc(const UINT16 wCfpId);

	/**
	* @brief 获取本TIOC处于分界点方向
	* @param wCfpId 分界点ID
	* @return 本TIOC处于分界点方向
	*/
	extern UINT8 GetCfpLocDir(const UINT16 wCfpId);

	/**
	* @brief 获取分界点内方第一link
	* @param wCfpId 分界点ID
	* @return 分界点内方第一link
	*/
	extern UINT16 GetCfpInFirstLink(const UINT16 wCfpId);

	/**
	* @brief 根据link和偏移量获取分界点ID
	* @param wLink
	* @param dwOffset
	* @return 0：查询失败  其他：分界点ID
	*/
	extern UINT16 GetCfpIdByPoint(UINT16 wLink, UINT32 dwOffset);

	/*
	* 功能描述：	整理读入的分界点配置数据
	* 参数说明：	无
	* 返回值  ：	CI_SUCCESS,整理成功
	*				CI_ERROR,整理失败
	*/
	extern UINT8 CutoffPointConfigDataManage(void);

	/**
* @brief 获取两点之间属于本控区的分界点
* @param struct_PathPoint strPointA
* @param struct_PathPoint strPointB
* @param struct_PathPoint *pPoint
* @return CI_SUCCESS:获取成功  CI_ERROR:获取失败
*/
	UINT8 GetCfpLocByTwoPoints(struct_PathPoint strPointA, struct_PathPoint strPointB, struct_PathPoint* pPoint);

	/**
	* @brief 获取两点之间属于本控区的分界点
	* @param struct_PathPoint strPointA
	* @param struct_PathPoint strPointB
	* @param struct_PathPoint *pPoint
	* @return CI_SUCCESS:获取成功  CI_ERROR:获取失败
	*/
	extern UINT8 GetCfpLocByTwoPointsEx(LOD_STRU strPointA, LOD_STRU strPointB, LOD_STRU *pPoint);

	/**
* @brief 获取分界点本方TIOC编号
* @param wCfpId 分界点ID
* @return 分界点相邻TIOC编号
* by cgh 20240221
*/
	UINT16 GetCfpwLocalTiocId(const UINT16 wCfpId);

	/*
    * @brief 获取分界点关联的相邻RC的信号机ID
    * @param const UINT16 wCfpId 分界点ID
    * @return 分界点关联的相邻RC的信号机ID
    * Created By LQ 2024.09.03
    */
	UINT16 GetCfpRelAdjacentRcSignalId(const UINT16 wCfpId);

#ifdef __cplusplus
}
#endif


#endif
