#pragma once
#include "font_atlas.h"
#include "interface/font_interface.h"

/**
 * @class bitmap_glyph_atlas
 * @brief 位图字形图集管理器
 *
 * 管理普通字形的位图纹理图集，使用单通道(R8)格式存储字形位图。
 * 支持从字体中提取字形位图并将其添加到图集中。
 */
class bitmap_glyph_atlas : public atlas_base {
public:
    /**
     * @brief 初始化位图字形图集
     *
     * @param in_atlas_size 图集的像素尺寸
     * @return 初始化是否成功
     */
    bool initialize(const Eigen::Vector2i& in_atlas_size) override {
        return initialize_atlas(in_atlas_size, SG_PIXELFORMAT_R8);
    }

    /**
     * @brief 获取或创建字形的纹理区域
     *
     * 尝试从缓存中获取字形的纹理区域，如果不存在则从字体中提取位图并添加到图集中。
     *
     * @param in_glyph_index 字形的Unicode码点或字体特定索引
     * @param in_font 用于渲染字形的字体
     * @param in_font_size 字体大小
     * @return 操作结果，包含成功/失败状态和区域信息
     */
    glyph_atlas_result_t get_or_create_glyph(
        int32_t in_glyph_index,
        const std::shared_ptr<font_face_interface>& in_font,
        float in_font_size);
};
