//
// Created by sasha on 03.12.2025.
//

#include "font_cache.h"

#include "engine/global_params.h"

#include <format>
#include <map>

std::map<std::string,TTF_Font*> listFonts;

TTF_Font *FontCache::getFont(const std::string &fontName,float ptsize){
    if (fontName.empty()) return nullptr;

    TTF_Font *font;
    std::string key = std::format("{}-{}",fontName,ptsize);
    std::string asset_path = GlobalParams::assetPath();

    // Если в кэше еще нет этого шрифта, создаем
    if (!listFonts.contains(key)){
        SDL_Log("[FontCache::getFont] create font: %s",key.c_str());
        font = TTF_OpenFont((asset_path+fontName).c_str(), ptsize);
        if (!font) {
            SDL_LogError(SDL_LOG_CATEGORY_CUSTOM, "[FontCache::getFont] Failed to load font %s: %s",
                         (asset_path+fontName).c_str(), SDL_GetError());
            return nullptr;
        }

        listFonts[key] = font;
    }

    return listFonts[key];
}

void FontCache::quit() {
    for (auto pair : listFonts){
        TTF_CloseFont(pair.second);
    }
    listFonts.clear();
}
