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

namespace rive {
    class LayerState;
    class StateMachineLayerImporter;
    class AnyState;
    class EntryState;
    class ExitState;
    class StateMachineLayer : public StateMachineLayerBase {
        friend class StateMachineLayerImporter;

    private:
        std::vector<LayerState*> m_States;
        AnyState* m_Any = nullptr;
        EntryState* m_Entry = nullptr;
        ExitState* m_Exit = nullptr;

        void addState(LayerState* state);

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

        StatusCode import(ImportStack& importStack) override;

        const AnyState* anyState() const { return m_Any; }
        const EntryState* entryState() const { return m_Entry; }
        const ExitState* exitState() const { return m_Exit; }

#ifdef TESTING
        size_t stateCount() const { return m_States.size(); }
        LayerState* state(size_t index) const {
            if (index < m_States.size()) {
                return m_States[index];
            }
            return nullptr;
        }
#endif
    };
} // namespace rive

#endif