#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;
	};
} // namespace rive

#endif