#pragma once

#include "../CompleteShader.h"
#include "../ShaderProgram.h"
#include <glm/glm.hpp>

/**
 * @brief 纯色着色器程序 (SolidColorShader)
 * 专门用于绘制纯色几何体，如选中框、调试图形等。
 */
class SolidColorShader final : public CompleteShader {
public:
    SolidColorShader();
    virtual ~SolidColorShader() = default;

    // --- CompleteShader 接口实现 ---

    // 必须返回 const 引用
    const Shader& getVertexShader() const override;

    // 必须返回 const 引用
    const Shader& getFragmentShader() const override;

    std::string getShaderName() const override {
        return "Solid Color Shader";
    }

    bool isDefaultShader() const override {
        return false;
    }

    // 必须是 const 成员函数
    void setDefaultUniforms(ShaderProgram* program) const override;

    // --- 颜色/不透明度控制方法 ---

    /**
     * @brief 设置着色器颜色
     * @param program 当前使用的着色器程序
     * @param r, g, b, a 颜色分量
     */
    void setColor(ShaderProgram* program, float r, float g, float b, float a);

    /**
     * @brief 设置着色器不透明度
     * @param program 当前使用的着色器程序
     * @param opacity 不透明度值
     */
    void setOpacity(ShaderProgram* program, float opacity);

private:
    // 内部着色器类 (定义在 .cpp 文件中，这里只需前向声明)
    class SolidColorVertexShader;
    class SolidColorFragmentShader;

    // 静态成员存储着色器实例
    static const SolidColorVertexShader s_vertexShader;
    static const SolidColorFragmentShader s_fragmentShader;
};