#include "core/icon_button.h"
#include "core/tokens.h"
#include <imgui.h>
#include <cstdio>

namespace fn_ui {

bool icon_button(const char* id, const char* glyph, const char* tooltip) {
    using namespace fn_tokens;

    // Estilo: subtle por defecto (transparente, hover surface_hover).
    ImGui::PushStyleColor(ImGuiCol_Button,        ImVec4(0, 0, 0, 0));
    ImGui::PushStyleColor(ImGuiCol_ButtonHovered, colors::surface_hover);
    ImGui::PushStyleColor(ImGuiCol_ButtonActive,  colors::surface);
    ImGui::PushStyleColor(ImGuiCol_Text,          colors::text);
    ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, radius::sm);
    ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(spacing::xs, spacing::xs));

    // Componer label_visible##id para que el label sea solo el glyph pero el
    // id del widget sea el parametro `id` (debe ser unico).
    char label[128];
    std::snprintf(label, sizeof(label), "%s%s", glyph ? glyph : "?", id);

    const bool clicked = ImGui::Button(label, ImVec2(28.0f, 28.0f));

    if (tooltip && *tooltip && ImGui::IsItemHovered()) {
        ImGui::SetTooltip("%s", tooltip);
    }

    ImGui::PopStyleVar(2);
    ImGui::PopStyleColor(4);
    return clicked;
}

} // namespace fn_ui
