#pragma once
#include <cstddef>
#include <functional>
#include <string>
#include <vector>

namespace fn_ui {

struct LayoutCallbacks {
    // Lista de nombres de layouts guardados. Se llama solo cuando el menu
    // Layouts esta abierto, por lo que puede consultar la BD on demand.
    std::function<std::vector<std::string>()> list;

    // Usuario clico un layout para aplicarlo. La app debe diferir el
    // ImGui::LoadIniSettingsFromMemory hasta el inicio del proximo frame.
    std::function<void(const std::string& name)> on_apply;

    // Usuario guardo el layout actual con ese nombre.
    std::function<void(const std::string& name)> on_save;

    // Usuario borro un layout.
    std::function<void(const std::string& name)> on_delete;

    // Usuario clico "Reset to default".
    std::function<void()> on_reset;

    // Nombre del layout activo (para mostrar marker visual). Vacio = ninguno.
    std::string active_name;
};

// Dibuja BeginMenu(menu_label) ... EndMenu() con:
//   * Lista de layouts guardados (cb.list()), cada uno como MenuItem clickeable.
//     Un marker "* " prefija el nombre si coincide con cb.active_name.
//   * Separator
//   * "Save current as..." (abre popup con InputText)
//   * "Delete" (submenu listando los layouts; click = on_delete)
//   * Separator
//   * "Reset to default"
//
// Llamar solo dentro de un BeginMainMenuBar() exitoso.
// Si algun callback es nullptr, se salta esa accion silenciosamente.
// Returns: true si el usuario disparo alguna accion (apply/save/delete/reset).
bool layouts_menu_items(const char* menu_label, LayoutCallbacks& cb);

} // namespace fn_ui
