#ifndef OpenTestSystem_DiagConfiguration_OtxDiagApi_IEcuConfiguration_H
#define OpenTestSystem_DiagConfiguration_OtxDiagApi_IEcuConfiguration_H

#include "ApiDefs.h"
#include "TypeDefs.h"
#include "OtxDataTypes/AllClasses.h"
#include "OtxDataTypes/OtxGatewayMode.h"
#include "OtxDataTypes/OtxMcdDataType.h"
#include <string>
#include <vector>
#include <memory>

namespace OpenTestSystem {
	namespace OtxDiagManager {
		namespace OtxDiagApi {
			/// <summary>
			/// @snippetdoc DocSnippets.txt OtxDiagApiClassComment
			/// </summary>
			class API_EXPORTS IEcuConfiguration
			{
			protected:
				inline IEcuConfiguration() {}
			public:
				inline virtual ~IEcuConfiguration() {}
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::shared_ptr<OtxDataTypes::IOtxDbConfigurationData>> GetDbComChannelDbConfigurationDatas(std::shared_ptr<OtxDataTypes::IOtxDbComChannel> dbComChannel) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::shared_ptr<OtxDataTypes::IOtxDbConfigurationRecord>> GetDbConfigurationDataDbConfigurationRecords(std::shared_ptr<OtxDataTypes::IOtxDbConfigurationData> dbConfigurationData) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::shared_ptr<OtxDataTypes::IOtxDbDataRecord> GetDbConfigurationRecordDbDataRecordByDataId(const std::string & dataId, std::shared_ptr<OtxDataTypes::IOtxDbConfigurationRecord> dbConfigurationRecord) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::shared_ptr<OtxDataTypes::IOtxDbDataRecord> GetDbConfigurationRecordDbDataRecordByKey(std::shared_ptr<OtxDataTypes::IOtxDbConfigurationRecord> dbConfigurationRecord, const std::string & key) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::shared_ptr<OtxDataTypes::IOtxDbDataRecord> GetDbConfigurationRecordDbDataRecordByName(std::shared_ptr<OtxDataTypes::IOtxDbConfigurationRecord> dbConfigurationRecord, const std::string &name) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetDbConfigurationRecordDbDataRecordDataIDs(std::shared_ptr<OtxDataTypes::IOtxDbConfigurationRecord> dbConfigurationRecord) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetDbConfigurationRecordDbDataRecordKeys(std::shared_ptr<OtxDataTypes::IOtxDbConfigurationRecord> dbConfigurationRecord) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetDbConfigurationRecordDbDataRecordNames(std::shared_ptr<OtxDataTypes::IOtxDbConfigurationRecord> dbConfigurationRecord) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::shared_ptr<OtxDataTypes::IOtxDbOptionItem>> GetDbConfigurationRecordDbOptionItems(std::shared_ptr<OtxDataTypes::IOtxDbConfigurationRecord> dbConfigurationRecord) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDbItemValueKey(std::shared_ptr<OtxDataTypes::IOtxDbItemValue> dbItemValue) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDbItemValueMeaning(std::shared_ptr<OtxDataTypes::IOtxDbItemValue> dbItemValue) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDbItemValueMeaningID(std::shared_ptr<OtxDataTypes::IOtxDbItemValue> dbItemValue) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDbItemValuePhysicalConstantValueAsString(std::shared_ptr<OtxDataTypes::IOtxDbItemValue> dbItemValue) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDbItemValueRule(std::shared_ptr<OtxDataTypes::IOtxDbItemValue> dbItemValue) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual int64 GetDbOptionItemBitLength(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual int64 GetDbOptionItemBitPosition(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual int64 GetDbOptionItemBytePosition(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual OtxDataTypes::OtxMcdDataTypes GetDbOptionItemDataType(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::shared_ptr<OtxDataTypes::IOtxDbItemValue>> GetDbOptionItemDbItemValues(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual int64 GetDbOptionItemDecimalPlaces(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::shared_ptr<OtxDataTypes::IOtxInterval> GetDbOptionItemInterval(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDbOptionItemPhysicalDefaultValueAsString(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDbOptionItemReadAudienceState(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDbOptionItemSemantic(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::shared_ptr<OtxDataTypes::IOtxTextTableElement>> GetDbOptionItemTextTableElements(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDbOptionItemUnitAsString(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDbOptionItemWriteAudienceState(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::shared_ptr<OtxDataTypes::IOtxDiagService>> GetReadConfigurationServices(std::shared_ptr<OtxDataTypes::IOtxComChannel> comChannel, std::shared_ptr<OtxDataTypes::IOtxDbConfigurationData> dbConfigurationData, std::shared_ptr<OtxDataTypes::IOtxDbConfigurationRecord> dbConfigurationRecord) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::shared_ptr<OtxDataTypes::IOtxDiagService>> GetWriteConfigurationServices(std::shared_ptr<OtxDataTypes::IOtxComChannel> comChannel, std::shared_ptr<OtxDataTypes::IOtxDbConfigurationData> dbConfigurationData, std::shared_ptr<OtxDataTypes::IOtxDbConfigurationRecord> dbConfigurationRecord, std::shared_ptr<OtxDataTypes::IOtxDbDataRecord> dbDataRecord) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual bool IsComplexDbOptionItem(std::shared_ptr<OtxDataTypes::IOtxDbOptionItem> dbOptionItem) = 0;
			};
		}
	}
}
#endif // OpenTestSystem_DiagConfiguration_OtxDiagApi_IEcuConfiguration_H