#ifndef _RIVE_I_KCONSTRAINT_HPP_
#define _RIVE_I_KCONSTRAINT_HPP_
#include "rive/generated/constraints/ik_constraint_base.hpp"
#include "rive/math/mat2d.hpp"
#include "rive/math/transform_components.hpp"
#include <vector>

namespace rive {
    class Bone;
    class IKConstraint : public IKConstraintBase {
    private:
        struct BoneChainLink {
            int index;
            Bone* bone;
            float angle;
            TransformComponents transformComponents;
            Mat2D parentWorldInverse;
        };
        std::vector<BoneChainLink> m_FkChain;
        void solve1(BoneChainLink* fk1, const Vec2D& worldTargetTranslation);
        void solve2(BoneChainLink* fk1, BoneChainLink* fk2, const Vec2D& worldTargetTranslation);
        void constrainRotation(BoneChainLink& fk, float rotation);

    public:
        void markConstraintDirty() override;
        StatusCode onAddedClean(CoreContext* context) override;
        void constrain(TransformComponent* component) override;
        void buildDependencies() override;
    };
} // namespace rive

#endif