#pragma once
#include <map>
#include <string>
#include <vector>

class CivDbConn;

#define CACHEEXPORT __declspec(dllexport)
// 节点
typedef struct 
{
	std::string sNo; // 本点号
	std::string xCoord; // x坐标
	std::string yCoord; // y坐标
} Junctions;

// 管段
typedef struct
{
	std::string sNo; // 编号
	std::string startX; // 起始节点x
	std::string startY; // 起始节点Y
	std::string endX;// 终止节点X
	std::string endY;// 终止节点Y
}Pipes;

/**
*追踪节点，管段信息缓存类
*/
class CACHEEXPORT CivTrackingResultCache
{
public:
	/**
	*@brief 缓存数据库的信息
	*@param dbConn 数据库连接
	*/
	void cacheInfoFromDb(CivDbConn* dbConn);

	/**
	*@brief 缓存信息转json字符串
	*@param jsonStr 转的结果值
	*/
	void transformToJsonStr(std::string jsonStr);

	/**
	*@brief 根据本点号获取节点坐标信息
	*@param sn 本点号
	*@param junctions, 输出参数，获取的节点信息
	*/
	void getNodeInfoBySn(const std::string& sn, Junctions& junctions);

	/**
	*@brief 根据本点号获取管段坐标信息
	*@param sn 本点号
	*@param junctions, 输出参数，获取的管段信息
	*/
	void getPipeInfoBySn(const std::string& sn, Pipes& pipes);

private:
	/**
	 *@brief 缓存数据库的节点数据
	 *@param dbConn 数据库连接
	 */
	void cacheJunctionInfoFromDb(CivDbConn* dbConn);

	/**
	*@brief 缓存数据管段信息
	*@param dbConn 
	*/
	void cachePipeInfoFromDb(CivDbConn* dbConn);

private:
	std::map<std::string, Junctions> mNodeCache; // 节点信息缓存
	std::map<std::string, Pipes> mPipesCache;// 管段信息缓存
};
