#include "Scene.h"

#include "RootNode.h"
#include "FontsManager.h"
#include "SceneItem.h"

#include <iostream>

Scene::Scene()
    : mRootNode(std::make_unique<RootNode>())
{
    mRootNode->setName("Scene_RootNode");
}

void Scene::update(FontsManager* fontsManager)
{
    mSceneItems.clear();
    updateNode(mRootNode.get(), fontsManager);
}

void Scene::updateNode(AbstractVisualNode* node, FontsManager* fontsManager)
{
    for (auto child : node->getChildren())
    {
        if (child->getIsVisible())
        {
            updateNode(child, fontsManager);
        }
    }

    node->update(fontsManager);

    for (std::size_t idx=0; idx< node->getNumSceneItems(); idx++)
    {
        if (auto item = node->getSceneItem(idx))
        {
            mSceneItems.push_back(item);
        }
    }
}

RootNode* Scene::getRootNode() const
{
    return mRootNode.get();
}

unsigned Scene::getNumItems() const
{
    return mSceneItems.size();
}

SceneItem* Scene::getItem(std::size_t idx) const
{
    return mSceneItems[idx];
}
