#ifndef DDbDataRecord_H
#define DDbDataRecord_H

#include <Command.h>

#include "DDbConfigurationRecord.h"
namespace ProtoGenWrapper
{
	class DDbDataRecord
	{
	public:
		DDbDataRecord(DDbConfigurationRecord dDbConfigurationRecord, std::string description, std::string descriptionID,
		                     std::string longName, std::string longNameID, std::string shortName,
		                     std::string uniqueObjectIdentifier, int32 objectType);
		void GetValues(DDbConfigurationRecord& dDbConfigurationRecord, std::string& description, std::string& descriptionID,
		               std::string& longName, std::string& longNameID, std::string& shortName,
		               std::string& uniqueObjectIdenDataIdtifier, int32& objectType);
		DDbDataRecord();

		enum DDbDataRecordType {drUnknown, drDataId, drKey};
		DDbDataRecordType GetType() const;
		
		DDbConfigurationRecord GetDDbConfigurationRecord() const;
		void SetDDbConfigurationRecord(const DDbConfigurationRecord& dDbConfigurationRecord);
		void Description(const std::string& description);
		std::string Description() const;
		void DescriptionID(const std::string& descriptionID);
		std::string DescriptionID() const;
		void LongName(const std::string& longName);
		std::string LongName() const;
		void LongNameID(const std::string& longNameID);
		std::string LongNameID() const;
		void ShortName(const std::string& shortName);
		std::string ShortName() const;
		void UniqueObjectIdentifier(const std::string& uniqueObjectIdentifier);
		std::string UniqueObjectIdentifier() const;
		void ObjectType(const int32 objectType);
		int32 ObjectType() const;
		void DataId(const std::string& dataID);
		std::string DataId() const;
		void Key(const std::string& key);
		std::string Key() const;
		
		friend bool operator==(const DDbDataRecord& lhs, const DDbDataRecord& rhs);
		friend bool operator!=(const DDbDataRecord& lhs, const DDbDataRecord& rhs);
	protected:

		void ThrowIfNoMatch(DDbDataRecordType dDbDataRecordType) const;
		DDbConfigurationRecord _dDbConfigurationRecord;
		std::string _description;
		std::string _descriptionID;
		std::string _longName;
		std::string _longNameID;
		std::string _shortName;
		std::string _uniqueObjectIdentifier;
		int32 _objectType;
		DDbDataRecordType _dDbDataRecordType;
		std::string _dataId;
		std::string _key;
	};
}
#endif // DDbDataRecord_H
