#ifndef OBJECTINFO_HPP_INCLUDED
#define OBJECTINFO_HPP_INCLUDED

#include "CacheableNode.hpp"
#include "../JavaClass/Class.hpp"
#include <vector>
#include <string>
#include <cstdint>
#include "IterableHashTable.hpp"

namespace Internal
{
    class ObjectInfo : public CacheableNode
    {
        public:
            ObjectInfo(const void* Obj);

            ObjectInfo() = default;
            ObjectInfo(ObjectInfo&& Obj) = default;
            ObjectInfo(const ObjectInfo& Obj) = default;
            ObjectInfo& operator=(ObjectInfo&& Obj) = default;
            ObjectInfo& operator=(const ObjectInfo& Obj) = default;

            static Class GetClass();

            std::vector<std::string> GetActions() const;
            std::int32_t GetID() const;
            std::vector<std::int32_t> GetImposterIDs() const;
            std::vector<std::int32_t> GetModelIDs() const;
            std::string GetName() const;
            std::vector<std::int32_t> GetObjectTypes() const;
            IterableHashTable GetParameters() const;
            std::int32_t GetSettingID() const;
            std::int32_t GetVarbitID() const;

    };
}

#endif // OBJECTINFO_HPP_INCLUDED
