#include <sstream>
#include <iomanip>
#include <array>

#include "rive/viewmodel/viewmodel.hpp"
#include "rive/viewmodel/viewmodel_property.hpp"
#include "rive/backboard.hpp"
#include "rive/importers/backboard_importer.hpp"

using namespace rive;

void ViewModel::addProperty(ViewModelProperty* property) { m_Properties.push_back(property); }

ViewModelProperty* ViewModel::property(size_t index)
{
    if (index < m_Properties.size())
    {
        return m_Properties[index];
    }
    return nullptr;
}

ViewModelProperty* ViewModel::property(const std::string& name)
{
    for (auto property : m_Properties)
    {
        if (property->name() == name)
        {
            return property;
        }
    }
    return nullptr;
}

void ViewModel::addInstance(ViewModelInstance* value) { m_Instances.push_back(value); }

ViewModelInstance* ViewModel::defaultInstance() { return m_Instances[defaultInstanceId()]; }

ViewModelInstance* ViewModel::instance(size_t index)
{
    if (index < m_Instances.size())
    {
        return m_Instances[index];
    }
    return nullptr;
}

ViewModelInstance* ViewModel::instance(const std::string& name)
{
    for (auto instance : m_Instances)
    {
        if (instance->name() == name)
        {
            return instance;
        }
    }
    return nullptr;
}