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

using namespace std;
/**
	优化调度水力计算
*/
class CivHydrScheduling
{
public:

	// 调度类型：压力，为
	enum SchedulingType
	{
		SchedulingFlow,
		SchedulingPressure,
		SchedulingALL
	};

	CivHydrScheduling(SchedulingType schedulingType);

	/**
	* 加载，打开 inp 文件
	*/
	bool open();

	/**
	*结束运算，关闭文件句柄
	*/
	bool close();

	/**
	* 动态更新水泵参数
	*/
	void updatePumpStatus(const map<string, int>& statusMap);

	/**
	* 执行一次水力计算
	*/
	bool  compute();

	/**
	*  设置压力监测点
	*/
	void setPressMonitors(vector<string>& monitors);

	/**
	*  设置流量监测点
	*/
	void setFlowMonitor(vector<string>& monitors);

	/**
	*  获取监测点的模拟值
	*/
	void monitorsValue(SchedulingType schedulingType, vector<map<string, double>>& simulMap);


private:
	// 调度类型: 压力，流量
	SchedulingType mSchedulingType; 
	
	// 压力监测点
	vector<string> mPressMonitorMap; 

	// 流量监测点
	vector<string> mFlowMonitorMap;

	// 压力监测监测点的模拟值
	vector<map<string, double>> mMonitorPressSmulVal; 

	// 流量监测点模拟值
	vector<map<string, double>> mMonitorFlowSmulVal;
};
