#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