#ifndef _RIVE_SKIN_HPP_
#define _RIVE_SKIN_HPP_
#include "rive/generated/bones/skin_base.hpp"
#include "rive/math/mat2d.hpp"
#include <stdio.h>
#include <vector>

namespace rive {
    class Tendon;
    class PathVertex;
    class Skinnable;

    class Skin : public SkinBase {
        friend class Tendon;

    public:
        ~Skin();

    private:
        Mat2D m_WorldTransform;
        std::vector<Tendon*> m_Tendons;
        float* m_BoneTransforms = nullptr;
        Skinnable* m_Skinnable;

    protected:
        void addTendon(Tendon* tendon);

    public:
        StatusCode onAddedClean(CoreContext* context) override;
        void buildDependencies() override;
        void deform(std::vector<PathVertex*>& vertices);
        void onDirty(ComponentDirt dirt) override;
        void update(ComponentDirt value) override;

#ifdef TESTING
        std::vector<Tendon*>& tendons() { return m_Tendons; }
#endif
    };
} // namespace rive

#endif