#ifndef NBOUTILS_HPP_INCLUDED
#define NBOUTILS_HPP_INCLUDED

#include <NBO/NBO/ENBOType.h>
#include <NBO/NBOGlobal.h>
#include <NBO/NBOVersion.h>
#include <NBO/Shared/Base/NBOBaseClass.h>
#include <string>
namespace Inscoper::NBO {

/*!
 * \brief Utils class provides static utility functions.
 *
 * This class contains helper functions for converting between enum types and
 * their string representations.
 */
class NBO_EXPORT NBOUtils {

public:
	/*!
	 * \brief Convert ENBOType enum to string.
	 *
	 * \param type The enum to convert
	 * \return The corresponding string value
	 */
	static std::string NBOTypeToString(Inscoper::NBO::ENBOType type);

	/*!
	 * \brief Convert string to ENBOType.
	 *
	 * \param name The string to convert
	 * \return The corresponding enum
	 */
	static Inscoper::NBO::ENBOType stringToNBOType(const std::string& name);
	/*!
	 * \brief Convert ENBOType enum to value.
	 *
	 * \param type : The enum to convert
	 * \return The corresponding value
	 */
	static int NBOTypeToValue(Inscoper::NBO::ENBOType type);

	/*!
	 * \brief Convert value to ENBOType.
	 *
	 * \param name : The value to convert
	 * \return The corresponding enum
	 */
	static Inscoper::NBO::ENBOType valueToNBOType(int value);
	/*!
	 * \brief Create an element instance from an ENBOType.
	 *
	 * \param name : The type identifying the element to create
	 * \return The created element, or nullptr if type is UNKNOWN
	 */
	static Inscoper::NBO::NBOBaseClassPtr createElementFromType(Inscoper::NBO::ENBOType type);
	/*!
	 * \brief Get the NBO library version string.
	 *
	 * \return The version string in the format "NBO vMAJOR.MINOR.PATCH[SUFFIX]"
	 */
	static std::string getVersion();
};

} // namespace Inscoper::NBO

#endif // NBOUTILS_HPP_INCLUDED