#include "rive/animation/nested_number.hpp"
#include "rive/animation/nested_state_machine.hpp"
#include "rive/animation/state_machine_input_instance.hpp"
#include "rive/container_component.hpp"

using namespace rive;
class StateMachineInstance;

// Use the NestedNumberBase m_NestedValue on initialization but then it won't
// be used anymore and interface directly with the nested input value.
void NestedNumber::applyValue()
{
  auto inputInstance = input();
  if (inputInstance != nullptr)
  {
    auto numInput = static_cast<SMINumber*>(inputInstance);
    if (numInput != nullptr)
    {
      numInput->value(NestedNumberBase::nestedValue());
    }
  }
}

void NestedNumber::nestedValue(float value)
{
  auto inputInstance = input();
  if (inputInstance != nullptr)
  {
    auto numInput = static_cast<SMINumber*>(inputInstance);
    if (numInput != nullptr && numInput->value() != value)
    {
      numInput->value(value);
    }
  }
}

float NestedNumber::nestedValue() const
{
  auto inputInstance = input();
  if (inputInstance != nullptr)
  {
    auto numInput = static_cast<SMINumber*>(inputInstance);
    if (numInput != nullptr)
    {
      return numInput->value();
    }
  }
  return 0.0;
}