#include "core/modal_dialog.h"
#include "core/tokens.h"
#include <imgui.h>

namespace fn_ui {

namespace {
bool g_modal_open_frame = false; // se setea en begin, se consulta en end
}

bool modal_dialog_begin(const char* title, bool* open, ImVec2 size) {
    using namespace fn_tokens;

    if (open && *open) {
        ImGui::OpenPopup(title);
        // Solo llamamos OpenPopup la primera vez que pasa a true — pero es
        // idempotente si ya esta abierto, asi que no hace falta edge detect.
    }

    // Centrar
    const ImVec2 center = ImGui::GetMainViewport()->GetCenter();
    ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
    if (size.x > 0.0f || size.y > 0.0f) {
        ImGui::SetNextWindowSize(size, ImGuiCond_Appearing);
    }

    // Estilo acorde con las cards
    ImGui::PushStyleColor(ImGuiCol_PopupBg,     colors::surface);
    ImGui::PushStyleColor(ImGuiCol_Border,      colors::border);
    ImGui::PushStyleColor(ImGuiCol_TitleBg,     colors::surface);
    ImGui::PushStyleColor(ImGuiCol_TitleBgActive, colors::surface);
    ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding,  radius::md);
    ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 1.0f);
    ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding,  ImVec2(spacing::lg, spacing::lg));

    bool ret = ImGui::BeginPopupModal(title, open,
                                      ImGuiWindowFlags_NoSavedSettings
                                    | ImGuiWindowFlags_AlwaysAutoResize);
    g_modal_open_frame = ret;
    return ret;
}

void modal_dialog_end() {
    if (g_modal_open_frame) {
        ImGui::EndPopup();
    }
    ImGui::PopStyleVar(3);
    ImGui::PopStyleColor(4);
    g_modal_open_frame = false;
}

} // namespace fn_ui
