#ifndef OpenTestSystem_DiagConfiguration_OtxDiagApi_IJob_H
#define OpenTestSystem_DiagConfiguration_OtxDiagApi_IJob_H

#include "ApiDefs.h"
#include "TypeDefs.h"
#include "OtxDataTypes/AllClasses.h"
#include "OtxDataTypes/OtxResultType.h"
#include "OtxDataTypes/OtxSeverityType.h"
#include "OtxDataTypes/OtxJobResponseState.h"
#include <string>
#include <memory>

namespace OpenTestSystem { namespace OtxDiagManager { namespace OtxDiagApi {
	/// <summary>
	/// @snippetdoc DocSnippets.txt OtxDiagApiClassComment
	/// </summary>
	class API_EXPORTS IJob
	{
	protected:
		inline IJob() {}
	public:
		inline virtual ~IJob() {}
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxResult> CreateResult(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxDiagService> diagService, std::string * codeDescription, std::string * vendorCodeDescription, OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::OtxResultTypes * resultType, OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::OtxSeverityTypes * severity, int32 * errorCode, int32 * vendorCode) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxResponse> CreateResponse(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxResult> result, OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::OtxJobResponseStates * responseState) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void AddBranchByIndex(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxParameterContainer> parameterContainer, std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxParameterContainer> content, double index) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void AddBranchByName(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxParameterContainer> parameterContainer, std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxParameterContainer> content, const std::string & shortName) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void AddBranchByValue(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxParameterContainer> parameterContainer, double value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void AddEnvDataByDtc(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxParameterContainer> parameterContainer, double dtc) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void AddElement(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxParameterContainer> parameterContainer, std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxParameterContainer> content) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual std::string GetJobInfo(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxDiagService> diagJob) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual int32 GetJobProgress(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxDiagService> diagJob) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void SendFinalResult(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxResult> result) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void SendIntermediateResult(std::shared_ptr<OpenTestSystem::OtxDiagManager::OtxDiagApi::OtxDataTypes::IOtxResult> result) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void SetJobInfo(const std::string & info) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiMethodComment
		/// </summary>
		virtual void SetProgressInfo(double process) = 0;
	};
}}}
#endif // OpenTestSystem_DiagConfiguration_OtxDiagApi_IJob_H