#ifndef _RIVE_LAYER_STATE_HPP_
#define _RIVE_LAYER_STATE_HPP_
#include "rive/generated/animation/layer_state_base.hpp"
#include <stdio.h>
#include <vector>

namespace rive {
    class StateTransition;
    class LayerStateImporter;
    class StateMachineLayerImporter;
    class StateInstance;

    class LayerState : public LayerStateBase {
        friend class LayerStateImporter;
        friend class StateMachineLayerImporter;

    private:
        std::vector<StateTransition*> m_Transitions;
        void addTransition(StateTransition* transition);

    public:
        ~LayerState();
        StatusCode onAddedDirty(CoreContext* context) override;
        StatusCode onAddedClean(CoreContext* context) override;

        StatusCode import(ImportStack& importStack) override;

        size_t transitionCount() const { return m_Transitions.size(); }
        StateTransition* transition(size_t index) const {
            if (index < m_Transitions.size()) {
                return m_Transitions[index];
            }
            return nullptr;
        }

        /// Make an instance of this state that can be advanced and applied by
        /// the state machine when it is active or being transitioned from.
        virtual StateInstance* makeInstance() const;
    };
} // namespace rive

#endif