#pragma once

// TextShader.h 在 .../systems/sources/def
#include "../CompleteShader.h"
#include "../Shader.h"
#include <glm/glm.hpp>

class ShaderProgram;

/**
 * @brief 文本着色器 (TextShader)
 * 继承自 CompleteShader，提供文本渲染所需的着色器代码和初始设置。
 */
class TextShader : public CompleteShader {
public:
    TextShader();
    virtual ~TextShader() = default;

    /**
     * @brief 获取着色器程序的名称。
     */
    std::string getShaderName() const override { return "TextShader"; }

    /**
     * @brief 获取顶点着色器定义。
     */
    const Shader& getVertexShader() const override;

    /**
     * @brief 获取片段着色器定义。
     */
    const Shader& getFragmentShader() const override;

    /**
     * @brief 设置程序链接完成后所需的默认统一变量。
     */
    void setDefaultUniforms(ShaderProgram* program);

    /**
     * @brief 设置文本颜色。
     */
    void setColor(const glm::vec4& color);

    /**
     * @brief 是否为默认着色器。
     */
    bool isDefaultShader() const override { return false; }

private:
    glm::vec4 m_color;

    // 静态着色器定义对象（用于返回代码和名称）
    class TextVertexShader;
    class TextFragmentShader;

    static const TextVertexShader s_vertexShader;
    static const TextFragmentShader s_fragmentShader;
};