#ifndef OpenTestSystem_OtxDiagManager_OtxDiagApi_IDiagComPlus_H
#define OpenTestSystem_OtxDiagManager_OtxDiagApi_IDiagComPlus_H

#include "ApiDefs.h"
#include "TypeDefs.h"
#include "OtxDataTypes/AllClasses.h"
#include "OtxDataTypes/OtxComChannelState.h"
#include <string>
#include <memory>
#include <vector>
#include <map>

namespace OpenTestSystem { namespace OtxDiagManager { namespace OtxDiagApi {
	/// <summary>
	/// @snippetdoc DocSnippets.txt OtxDiagApiClassComment
	/// </summary>
	class API_EXPORTS IDiagComPlus
	{
	protected:
		IDiagComPlus() {}
	public:
		virtual ~IDiagComPlus() {}
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComChannel> CreateComChannel(const std::string & identifier, const std::string & ecuVariantName) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::OtxComChannelStates GetComChannelState(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComChannel> comChannel) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual std::vector<std::string> GetComParameterList(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComChannel> comChannel) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void StartCommunication(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComChannel> comChannel) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void StopCommunication(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComChannel> comChannel) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void ExecuteHexDiagServiceFunctional(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComChannel> comChannel, std::vector<unsigned char> hexRequest, std::map<std::string, std::string>& responses) = 0;
	};
}}}
#endif // OpenTestSystem_OtxDiagManager_OtxDiagApi_IDiagComPlus_H