#include "rive/animation/state_machine_input_instance.hpp"
#include "rive/animation/state_machine_bool.hpp"
#include "rive/animation/state_machine_number.hpp"
#include "rive/animation/state_machine_trigger.hpp"
#include "rive/animation/state_machine_instance.hpp"

using namespace rive;

SMIInput::SMIInput(const StateMachineInput* input, StateMachineInstance* machineInstance) :
    m_MachineInstance(machineInstance), m_Input(input) {}

uint16_t SMIInput::inputCoreType() const { return m_Input->coreType(); }

const std::string& SMIInput::name() const { return m_Input->name(); }

void SMIInput::valueChanged() { m_MachineInstance->markNeedsAdvance(); }

// bool

SMIBool::SMIBool(const StateMachineBool* input, StateMachineInstance* machineInstance) :
    SMIInput(input, machineInstance), m_Value(input->value()) {}

void SMIBool::value(bool newValue) {
    if (m_Value == newValue) {
        return;
    }
    m_Value = newValue;
    valueChanged();
}

// number
SMINumber::SMINumber(const StateMachineNumber* input, StateMachineInstance* machineInstance) :
    SMIInput(input, machineInstance), m_Value(input->value()) {}

void SMINumber::value(float newValue) {
    if (m_Value == newValue) {
        return;
    }
    m_Value = newValue;
    valueChanged();
}

// trigger
SMITrigger::SMITrigger(const StateMachineTrigger* input, StateMachineInstance* machineInstance) :
    SMIInput(input, machineInstance) {}

void SMITrigger::fire() {
    if (m_Fired) {
        return;
    }
    m_Fired = true;
    valueChanged();
}
