#ifndef _RIVE_KEY_FRAME_HPP_
#define _RIVE_KEY_FRAME_HPP_
#include "rive/generated/animation/keyframe_base.hpp"
namespace rive
{
	class CubicInterpolator;

	class KeyFrame : public KeyFrameBase
	{
	private:
		CubicInterpolator* m_Interpolator = nullptr;
		float m_Seconds;

	public:
		inline float seconds() const { return m_Seconds; }
		inline CubicInterpolator* interpolator() const
		{
			return m_Interpolator;
		}

		void computeSeconds(int fps);

		StatusCode onAddedDirty(CoreContext* context) override;
		virtual void apply(Core* object, int propertyKey, float mix) = 0;
		virtual void applyInterpolation(Core* object,
		                                int propertyKey,
		                                float seconds,
		                                const KeyFrame* nextFrame,
		                                float mix) = 0;

		StatusCode import(ImportStack& importStack) override;
	};
} // namespace rive

#endif