#pragma once

#include "BufferBuilder.h" 
#include "../../systems/RenderSystem.h"

namespace Vivid2D::Render::Buffer {

    /**
     * @brief 缓冲区上传器：负责应用渲染状态、绑定 VAO 并执行绘制。
     */
    class VIVID_2D_MYDLL_API BufferUploader {
    public:
        /**
		* @brief 使用着色器绘制已构建的缓冲区，并接管所有权。
		* @param buffer 待绘制 BuiltBuffer 的 unique_ptr。
		*/
        static void drawWithShader(std::unique_ptr<BuiltBuffer> buffer);

        /**
         * @brief 绘制已构建的缓冲区。与 drawWithShader 相同。
         */
        static void draw(std::unique_ptr<BuiltBuffer> buffer) {
            drawWithShader(std::move(buffer));
        }

    private:
        /**
         * @brief 应用指定的渲染状态。
         */
        static void applyRenderState(const RenderState& state);

        /**
         * @brief 恢复到之前的渲染状态。
         */
        static void restoreRenderState(const RenderState& previousState);
    };

} // namespace Buffer