#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"

using namespace rive;

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 (inputId() < 0 ||
        inputId() >= stateMachineImporter->stateMachine()->inputCount())
    {
        return StatusCode::InvalidObject;
    }
    auto input = stateMachineImporter->stateMachine()->input((size_t)inputId());
    if (input == nullptr || !input->is<StateMachineNumber>()) {
        return StatusCode::InvalidObject;
    }
    return Super::import(importStack);
}