#ifdef WITH_RIVE_SCRIPTING
#include "rive/scripted/script_backend.hpp"
#include "rive/scripted/scripted_object.hpp"

#include <vector>

using namespace rive;

ScriptBackend::~ScriptBackend() { detachScriptedObjects(); }

void ScriptBackend::displayScale(float scale)
{
  if (scale == m_displayScale)
  {
    return;
  }
  m_displayScale = scale;
  // The callback runs script code that can register or unregister objects
  // on this backend; walk a snapshot and skip anything since removed.
  std::vector<ScriptedObject*> objects(
      m_scriptedObjects.begin(),
      m_scriptedObjects.end());
  for (ScriptedObject* object : objects)
  {
    if (m_scriptedObjects.count(object) != 0)
    {
      object->displayScaleChanged();
    }
  }
}

void ScriptBackend::registerScriptedObject(ScriptedObject* object)
{
  if (object != nullptr)
  {
    m_scriptedObjects.insert(object);
  }
}

void ScriptBackend::unregisterScriptedObject(ScriptedObject* object)
{
  if (object != nullptr)
  {
    m_scriptedObjects.erase(object);
  }
}

void ScriptBackend::detachScriptedObjects()
{
  for (ScriptedObject* object : m_scriptedObjects)
  {
    object->m_vm = nullptr;
  }
  m_scriptedObjects.clear();
}
#endif
