#ifndef OpenTestSystem_OtxDiagManager_OtxDiagApi_OtxDataTypes_IOtxValue_H
#define OpenTestSystem_OtxDiagManager_OtxDiagApi_OtxDataTypes_IOtxValue_H

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

namespace OpenTestSystem { namespace OtxDiagManager { namespace OtxDiagApi { namespace OtxDataTypes {
	/// <summary>
	/// @snippetdoc DocSnippets.txt OtxDiagApiEnumerationComment
	/// </summary>
	class API_EXPORTS IOtxValue {
	protected:
		IOtxValue() {}
	public:
		virtual ~IOtxValue() {}

		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual void SetBoolValue(bool value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual void SetBytefieldValue(std::vector<unsigned char> value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual void SetAsciistringValue(const std::string& value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual void SetInt32Value(int32 value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual void SetInt64Value(int64 value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual void SetFloatValue(float value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual void SetDoubleValue(double value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual void SetUint32Value(uint32 value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual void SetUint64Value(uint64 value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual void SetValueAsString(const std::string& value) = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual bool GetBoolValue() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual std::string GetBytefieldValue() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual std::string GetAsciistringValue() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual int32 GetInt32Value() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual int64 GetInt64Value() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual float GetFloatValue() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual double GetDoubleValue() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual uint32 GetUint32Value() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual uint64 GetUint64Value() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual std::shared_ptr<IOtxDbDiagTroubleCode> GetTroubleCode() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual std::string GetValueAsString() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual std::vector<std::shared_ptr<IOtxValue>> GetListValue() const = 0;
		/// <summary>
		/// @snippetdoc DocSnippets.txt OtxDiagApiDatatypeComfortMethodComment
		/// </summary>
		virtual ValueTypes GetType() const = 0;
	};
}}}}
#endif // OpenTestSystem_OtxDiagManager_OtxDiagApi_OtxDataTypes_IOtxValue_H