#include "NumberText.h"

void NumberText::PreloadDigits()
{
    // 需要支持的字符：0-9和负号
    const std::string digits = "0123456789-";
    for (char c : digits)
    {
        std::string charStr(1, c);
        // 渲染单个字符为纹理
        SDL_Surface *surface = TTF_RenderUTF8_Blended(m_font, charStr.c_str(), m_color);
        if (!surface)
        {
            SDL_LogError(0, "数字字符渲染数字字符失败：%s", TTF_GetError());
            continue;
        }
        // 转换为RGBA格式
        SDL_Surface *rgbaSurface = SDL_ConvertSurfaceFormat(surface, SDL_PIXELFORMAT_ABGR8888, 0);
        SDL_FreeSurface(surface);
        // 创建纹理并缓存
        Texture *tex = new Texture();
        tex->Init(rgbaSurface);
        SDL_FreeSurface(rgbaSurface);
        m_digitTextures[c] = tex;
    }
}

void NumberText::UpdateDigitSprites(const std::string &numStr)
{
    // // 先释放旧的精灵
    // for (auto *sprite : m_digitSprites)
    // {
    //     if (sprite)
    //     {
    //         delete sprite;
    //     }
    // }
    // m_digitSprites.clear();

    // // 计算总宽度（用于居中或左对齐）
    // int totalWidth = 0;
    // std::vector<int> charWidths; // 记录每个字符的宽度
    // for (char c : numStr)
    // {
    //     auto it = m_digitTextures.find(c);
    //     if (it == m_digitTextures.end())
    //         continue; // 跳过不支持的字符
    //     int w = it->second->getSize().width;
    //     totalWidth += w;
    //     charWidths.push_back(w);
    // }

    // // 绘制每个字符（从左到右排列）
    // float currentX = GetWorldPos().x; // 基于当前位置排列
    // float currentY = GetWorldPos().y;
    // int index = 0;
    // for (char c : numStr)
    // {
    //     auto it = m_digitTextures.find(c);
    //     if (it == m_digitTextures.end())
    //         continue;

    //     // 创建字符精灵
    //     Sprite *sprite = new Sprite();
    //     sprite->SetTexture(it->second);
    //     sprite->SetPosition(Vec2(currentX, currentY));
    //     sprite->SetSize(it->second->getSize());

    //     m_digitSprites.push_back(sprite);

    //     // 移动到下一个字符的位置（预留1px间距）
    //     currentX += charWidths[index] + 1;
    //     index++;
    // }
}

NumberText::NumberText(TTF_Font *font, SDL_Color color) : m_font(font), m_color(color)
{
    PreloadDigits();
}

NumberText::~NumberText()
{
}

void NumberText::SetNumber(int number)
{
    if (number == m_currentNumber)
        return; // 数字未变化则跳过
    m_currentNumber = number;

    // 转换数字为字符串（处理负数）
    std::string numStr = std::to_string(number);
    UpdateDigitSprites(numStr); // 更新数字精灵布局
}

void NumberText::Render()
{
    // for (auto *sprite : m_digitSprites)
    // {
    //     if (sprite)
    //         sprite->Render();
    // }
}