#include "rive/animation/blend_animation_direct.hpp"
#include "rive/animation/state_machine.hpp"
#include "rive/animation/state_machine_number.hpp"
#include "rive/importers/state_machine_importer.hpp"
#include "rive/importers/bindable_property_importer.hpp"
#include "rive/data_bind/bindable_property.hpp"

using namespace rive;

BlendAnimationDirect::~BlendAnimationDirect()
{
  if (m_bindableProperty != nullptr)
  {
    delete m_bindableProperty;
    m_bindableProperty = nullptr;
  }
}

StatusCode BlendAnimationDirect::onAddedDirty(CoreContext* context)
{
  return StatusCode::Ok;
}

StatusCode BlendAnimationDirect::onAddedClean(CoreContext* context)
{
  return StatusCode::Ok;
}

StatusCode BlendAnimationDirect::import(ImportStack& importStack)
{
  auto stateMachineImporter = importStack.latest<StateMachineImporter>(
      StateMachine::typeKey);
  if (stateMachineImporter == nullptr)
  {
    return StatusCode::MissingObject;
  }

  // Make sure the inputId doesn't overflow the input buffer.
  if (blendSource() == static_cast<int>(DirectBlendSource::inputId))
  {
    if ((size_t)inputId() >= stateMachineImporter->stateMachine()->inputCount())
    {
      return StatusCode::InvalidObject;
    }
    auto input = stateMachineImporter->stateMachine()->input((size_t)inputId());
    if (input == nullptr || !input->is<StateMachineNumber>())
    {
      return StatusCode::InvalidObject;
    }
  }
  else if (blendSource() == static_cast<int>(DirectBlendSource::dataBindId))
  {
    auto bindablePropertyImporter = importStack
                                        .latest<BindablePropertyImporter>(
                                            BindablePropertyBase::typeKey);
    if (bindablePropertyImporter == nullptr)
    {
      return StatusCode::MissingObject;
    }
    m_bindableProperty = bindablePropertyImporter->bindableProperty();
  }
  return Super::import(importStack);
}
