#pragma once
#include <cstddef>
#include "core/panel_menu.h"
#include "core/layouts_menu.h"
#include "core/app_settings.h"
#include "core/app_about.h"

namespace fn_ui {

// Callback opcional que la app puede inyectar para añadir items propios
// al final del menu "View", justo despues de los toggles de paneles.
// El callback se invoca dentro de un `BeginMenu("View")` ya abierto: la
// app llama directamente a `ImGui::Separator()`, `ImGui::MenuItem(...)`,
// `ImGui::BeginDisabled()`, etc. NO debe hacer Begin/EndMenu para "View".
// Devuelve true si el usuario activo algun item este frame.
using ViewMenuExtrasFn = bool(*)(void* user_data);

// Renderiza una MainMenuBar completa con:
//   * Menu "View" (panel_menu_items con los toggles dados)        [si panels]
//   * Menu "Layouts" (layouts_menu_items con las callbacks dadas) [si layouts_cb]
//   * Menu "Settings" con submenus:                                [siempre]
//       - "Settings..." → abre la ventana de settings
//       - "About..."    → abre la ventana About
//
// Llamar despues de NewFrame() y antes del DockSpaceOverViewport.
// Si layouts_cb es nullptr, omite Layouts.
// Si panels es nullptr o count == 0, omite View (o solo dibuja extras
// si view_extras != nullptr).
// Las ventanas Settings y About se renderizan al final del frame en
// fn::run_app via settings_window_render() y about_window_render().
//
// Returns: true si el usuario togglo paneles, disparo accion de layouts,
// o abrio una ventana este frame.
bool app_menubar(const PanelToggle* panels, std::size_t count,
                 LayoutCallbacks* layouts_cb,
                 ViewMenuExtrasFn view_extras = nullptr,
                 void* view_extras_user = nullptr);

} // namespace fn_ui
