#ifndef OpenTestSystem_DiagDataBrowsing_OtxDiagApi_IDiagDataBrowsing_H
#define OpenTestSystem_DiagDataBrowsing_OtxDiagApi_IDiagDataBrowsing_H

#include "ApiDefs.h"
#include "OtxDataTypes/AllClasses.h"
#include "OtxDataTypes/OtxComChannelCategory.h"
#include <string>
#include <memory>
#include <vector>

namespace OpenTestSystem {
	namespace OtxDiagManager {
		namespace OtxDiagApi {
			/// <summary>
			/// @snippetdoc DocSnippets.txt OtxDiagApiClassComment
			/// </summary>
			class API_EXPORTS IDiagDataBrowsing
			{
			protected:
				IDiagDataBrowsing() {}
			public:
				virtual ~IDiagDataBrowsing() {}
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetAllowedParameterValueList(std::shared_ptr<OtxDataTypes::IOtxParameter> parameter) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetRequestParameterList(std::shared_ptr<OtxDataTypes::IOtxDiagService> diagService) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetResponseParameterList(std::shared_ptr<OtxDataTypes::IOtxDiagService> diagService) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetComChannelList(OtxDataTypes::OtxComChannelCategories* category = NULL) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetDiagServiceList(std::shared_ptr<OtxDataTypes::IOtxComChannel> comChannel) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetEcuVariantList(std::shared_ptr<OtxDataTypes::IOtxComChannel> comChannel) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual bool IsStringParameter(std::shared_ptr<OtxDataTypes::IOtxParameter> parameter) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual bool IsBooleanParameter(std::shared_ptr<OtxDataTypes::IOtxParameter> parameter) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual bool IsNumericParameter(std::shared_ptr<OtxDataTypes::IOtxParameter> parameter) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual bool IsByteFieldParameter(std::shared_ptr<OtxDataTypes::IOtxParameter> parameter) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual bool IsComplexParameter(std::shared_ptr<OtxDataTypes::IOtxParameter> parameter) = 0;
			};
		}
	}
}
#endif // OpenTestSystem_DiagDataBrowsing_OtxDiagApi_IDiagDataBrowsing_H