#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 ArtboardInstance;
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() override;
    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 std::unique_ptr<StateInstance> makeInstance(
        ArtboardInstance* instance) const;
};
} // namespace rive

#endif