#include "rive/animation/event_bool_change.hpp"
#include "rive/animation/state_machine_instance.hpp"
#include "rive/animation/state_machine_bool.hpp"
#include "rive/animation/state_machine_input_instance.hpp"
using namespace rive;

bool EventBoolChange::validateInputType(const StateMachineInput* input) const {
    // A null input is valid as the StateMachine can attempt to limp along if we
    // introduce new input types that old conditions are expected to handle in
    // newer runtimes. The older runtimes will just evaluate them to true.
    return input == nullptr || input->is<StateMachineBool>();
}

void EventBoolChange::perform(StateMachineInstance* stateMachineInstance) const {
    auto inputInstance = stateMachineInstance->input(inputId());
    if (inputInstance == nullptr) {
        return;
    }
    // If it's not null, it must be our correct type (why we validate at load time).
    auto boolInput = reinterpret_cast<SMIBool*>(inputInstance);
    switch (value()) {
        case 0:
            boolInput->value(false);
            break;
        case 1:
            boolInput->value(true);
            break;
        default:
            boolInput->value(!boolInput->value());
            break;
    }
}