//
// Created by Hanno Gödecke on 18.07.24.
//
#include "RNFNameComponentManagerWrapper.h"

namespace margelo {

    void NameComponentManagerWrapper::loadHybridMethods() {
        registerHybridMethod("getEntityName", &NameComponentManagerWrapper::getEntityName, this);
    }

    // TODO: This code is similar to EntityNameMap AnimatorWrapper::createEntityNameMap, consider refactoring
    std::optional<std::string>
    NameComponentManagerWrapper::getEntityName(std::shared_ptr<EntityWrapper> entityWrapper) {
        if (!entityWrapper) {
            throw std::invalid_argument("EntityWrapper is null");
        }

        Entity entity = entityWrapper->getEntity();
        bool hasEntity = pointee()->hasComponent(entity);
        if (!hasEntity) {
            Logger::log(TAG, "Entity wasn't found in NameComponentManager");
            return std::nullopt;
        }

        NameComponentManager::Instance instance = pointee()->getInstance(entity);
        if (!instance || !instance.isValid()) {
            Logger::log(TAG, "Instance wasn't found in NameComponentManager");
            return std::nullopt;
        }
        return pointee()->getName(instance);
    }
}