#ifndef OpenTestSystem_DiagManager_OtxDiagApi_IOtxDiag_H
#define OpenTestSystem_DiagManager_OtxDiagApi_IOtxDiag_H

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

namespace OpenTestSystem { namespace OtxDiagManager { namespace OtxDiagApi {
	class IDiagCom;
	class IDiagComPlus;
	class IDiagConfiguration;
	class IDiagDataBrowsing;
	class IDiagDataBrowsingPlus;
	class IFlash;
	class IFlashPlus;
	class IComInterface;
	class IJob;
	class IVehicleInfo;
	class IEcuConfiguration;
	class IBusMonitoring;

	/// <summary>
	/// DiagManager, which contains methods to get access to the supported OTX extension classes
	/// </summary>
	class API_EXPORTS IOtxDiag
	{
	protected:
		IOtxDiag() {};
	public:
		virtual ~IOtxDiag() {}
		/// <summary>
		/// Returns an instance of DiagCom
		/// </summary>
		/// <returns>Instance of DiagCom</returns>
		virtual std::shared_ptr<IDiagCom> GetDiagCom() = 0;
		/// <summary>
		/// Returns an instance of DiagComPlus
		/// </summary>
		/// <returns>Instance of DiagComPlus</returns>
		virtual std::shared_ptr<IDiagComPlus> GetDiagComPlus() = 0;
		/// <summary>
		/// Returns an instance of DiagConfiguration
		/// </summary>
		/// <returns>Instance of DiagConfiguration</returns>
		virtual std::shared_ptr<IDiagConfiguration> GetDiagConfiguration() = 0;
		/// <summary>
		/// Returns an instance of DiagDataBrowsing
		/// </summary>
		/// <returns>Instance of DiagDataBrowsing</returns>
		virtual std::shared_ptr<IDiagDataBrowsing> GetDiagDataBrowsing() = 0;
		/// <summary>
		/// Returns an instance of DiagDataBrowsingPlus
		/// </summary>
		/// <returns>Instance of DiagDataBrowsingPlus</returns>
		virtual std::shared_ptr<IDiagDataBrowsingPlus> GetDiagDataBrowsingPlus() = 0;
		/// <summary>
		/// Returns an instance of Flash
		/// </summary>
		/// <returns>Instance of Flash</returns>
		virtual std::shared_ptr<IFlash> GetFlash() = 0;
		/// <summary>
		/// Returns an instance of FlashPlus
		/// </summary>
		/// <returns>Instance of FlashPlus</returns>
		virtual std::shared_ptr<IFlashPlus> GetFlashPlus() = 0;
		/// <summary>
		/// Returns an instance of ComInterface
		/// </summary>
		/// <returns>Instance of ComInterface</returns>
		virtual std::shared_ptr<IComInterface> GetComInterface() = 0;
		/// <summary>
		/// Returns an instance of Job
		/// </summary>
		/// <returns>Instance of Job</returns>
		virtual std::shared_ptr<IJob> GetJob() = 0;
		/// <summary>
		/// Returns an instance of VehicleInfo
		/// </summary>
		/// <returns>Instance of VehicleInfo</returns>
		virtual std::shared_ptr<IVehicleInfo> GetVehicleInfo() = 0;
		/// <summary>
		/// Returns an instance of EcuConfiguration
		/// </summary>
		/// <returns>Instance of EcuConfiguration</returns>
		virtual std::shared_ptr<IEcuConfiguration> GetEcuConfiguration() = 0;
		/// <summary>
		/// Returns an instance of BusMonitoring
		/// </summary>
		/// <returns>Instance of BusMonitoring</returns>
		virtual std::shared_ptr<IBusMonitoring> GetBusMonitoring() = 0;
	};
}}}
#endif // OpenTestSystem_DiagManager_OtxDiagApi_IOtxDiag_H