#ifndef _RIVE_BLEND_STATE_HPP_
#define _RIVE_BLEND_STATE_HPP_
#include "rive/generated/animation/blend_state_base.hpp"
#include <stdio.h>
#include <vector>
#include <algorithm>

namespace rive {
    class BlendAnimation;
    class LayerStateImporter;

    class BlendState : public BlendStateBase {
        friend class LayerStateImporter;

    private:
        std::vector<BlendAnimation*> m_Animations;
        void addAnimation(BlendAnimation* animation);

    public:
        ~BlendState();
        inline const std::vector<BlendAnimation*>& animations() const {
            return m_Animations;
        }

#ifdef TESTING
        size_t animationCount() { return m_Animations.size(); }
        BlendAnimation* animation(size_t index) { return m_Animations[index]; }
#endif
    };
} // namespace rive

#endif
