#pragma once

#include "AnimationParameter.h"
#include <vector>
#include <memory>

// 向前声明以减少头文件依赖
namespace spdlog {
    class logger;
}

namespace Vivid2D {

    class ModelPart;

    /**
     * @class FrameInterpolator
     * @brief 一个静态工具类，用于根据关键帧数据计算和应用插值变换。
     *        对应于 Java 中的 FrameInterpolator 类。
     */
    class VIVID_2D_MYDLL_API FrameInterpolator {
    public:
        // 删除构造函数，这是一个纯静态类
        FrameInterpolator() = delete;

        /**
         * @brief 将变换操作按当前关键帧插值并应用到 ModelPart 列表。
         * @param pm 参数管理器实例。
         * @param parts 要更新的 ModelPart 列表。
         * @param currentAnimationParameter 当前活动的动画参数（包含了时间轴上的当前值）。
         * @param logger 用于记录错误的 spdlog 日志记录器。
         */
        static void applyFrameInterpolations(
            const ParametersManagement& pm,
            const std::vector<ModelPart*>& parts,
            const AnimationParameter& currentAnimationParameter,
            std::shared_ptr<spdlog::logger> logger
        );
    };

} // namespace Vivid2D