#ifndef OpenTestSystem_DiagConfiguration_OtxDiagApi_IComInterface_H
#define OpenTestSystem_DiagConfiguration_OtxDiagApi_IComInterface_H

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

namespace OpenTestSystem {
	namespace OtxDiagManager {
		namespace OtxDiagApi {
			/// <summary>
			/// @snippetdoc DocSnippets.txt OtxDiagApiClassComment
			/// </summary>
			class API_EXPORTS IComInterface
			{
			protected:
				inline IComInterface() {}
			public:
				inline virtual ~IComInterface() {}
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual void ActivateEthernet(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual void CloseComInterface(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual void ConnectComInterface(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual void DeactivateEthernet(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComChannel> CreateComChannelFromComInterface(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce, const std::string & identifier, const std::string & ecuVariantName = "", const std::string & resource = "") = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual double GetBatteryVoltageFromComInterface(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComChannel> GetComChannelFromComInterface(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce, const std::string & identifier, const std::string & ecuVariantName = "", bool performVariantSelection = false, const std::string & resource = "") = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> GetComInterface(const std::string & comInterfaceName) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetComInterfaceNameList(const OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::OtxConnectionStates* connectionState) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetComInterfaceNameListFromEthernet(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce, const std::string & optionString) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::map<std::string, std::string> GetComInterfaceProperties(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::vector<std::string> GetComInterfaceResourceNameList(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual std::string GetDefaultComInterfaceName() = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual bool GetIgnitionStateFromComInterface(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual bool IsEthernetActivated(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce) = 0;
				/// <summary>
				/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
				/// </summary>
				virtual bool IsInterfaceConnected(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxComInterface> comInterfce) = 0;
			};
		}
	}
}
#endif // OpenTestSystem_DiagConfiguration_OtxDiagApi_IComInterface_H