#ifndef __OTX_FLASH_ECU_HPP__
#define __OTX_FLASH_ECU_HPP__

#include "File.hpp"
#include <vector>

namespace otx {
	namespace flash {
		/**
		 * @brief 描述一个需要刷写的ECU信息。
		 *
		 */
		class ECU {
		public:
			ECU();
			ECU(const ECU& right) = default;
			ECU& operator=(const ECU& right) = default;
			virtual ~ECU() = default;
		private:
			std::string mName;// 友好的名称。
			std::string mId;// 唯一的标识符。
			std::string mDbLogicalLinkName; // 否则无法创建连接。
			int mPriority;
			int securityAccess;
			int installVerify;
			int signatureMode;

			std::string activeSBLAddress;
			std::vector<File> mFiles; // 文件结构体较小，直接传值。
			std::vector<std::string> m_vecCmd;

			size_t mTotalSize;// 所有文件大小总和。
			int mSecurityAccessMode = 0;//刷写安全访问模式 0:普通刷写，优先使用pinCode; 1:换件刷写，优先刷写 FFFFFFFF
			size_t mDownloadedSize;//下载文件大小

		public:
			bool isProd = false;//签名prod/dev
			virtual std::string getName();
			virtual void setName(const std::string& name);
			virtual std::string getId();
			virtual void setId(const std::string& id);
			virtual std::string getDbLogicalLinkName();
			virtual void setDbLogicalLinkName(const std::string& v);

			virtual void addFile(File& file);
			virtual std::vector<File>* getFiles();

			virtual void addCmd(std::string& cmd);
			virtual std::vector<std::string>* getCmd();
			virtual void clearCmd();

			virtual void setPriority(int v);
			virtual int getPriority();

			virtual void setSignatureMode(int v);
			virtual int getSignatureMode();

			virtual void setSecurityAccessMode(int securityAccessMode);
			virtual int getSecurityAccessMode();

			virtual void setSecurityAccess(int securityAccess);
			virtual int getSecurityAccess();

			virtual void setInstallVerify(int installVerify);
			virtual int getInstallVerify();

			virtual void setActiveSBLAddress(std::string activeSBLAddress);
			virtual std::string getActiveSBLAddress();

			virtual size_t getTotalSize();

			virtual  void setTotalSize(size_t size);

			virtual size_t getDownloadedSize();
			virtual  void setDownloadedSize(size_t size);
		};
	} // namespace flash
} // namespace otx

#endif // __OTX_FLASH_ECU_HPP__