#pragma once
//
// selectable_text — texto que el usuario puede seleccionar y copiar dentro
// de cualquier ventana ImGui. Reemplazo drop-in de ImGui::Text /
// ImGui::TextWrapped cuando se quiere permitir copia.
//
// ImGui::Text/TextWrapped son draw-list puro: no aceptan eventos de mouse.
// Para permitir seleccion de caracteres usamos InputTextMultiline con flag
// ReadOnly y el frame stylado a transparente — visualmente identico a
// TextWrapped pero arrastrable y copiable con Ctrl+C / boton derecho.
//
// Uso recomendado: en paneles donde el usuario quiere copiar contenido (chat,
// inspector, logs, notes view, output de queries, etc.). En toolbars y
// labels cortas no merece la pena cambiar — la version "TextCopy" basada en
// Text() + popup de boton derecho es mas ligera.

#include <cstdarg>
#include "imgui.h"

namespace fn_ui {

// Texto seleccionable con wrap automatico al ancho disponible (drop-in de
// ImGui::TextWrapped). Multi-linea. El usuario puede arrastrar para
// seleccionar y copiar con Ctrl+C o desde el menu contextual.
void selectable_text_wrapped(const char* text);

// Como selectable_text_wrapped pero forzando el wrap incluso para
// "palabras" que no tienen espacios (URLs largas, JSON, hashes). El
// InputTextMultiline base solo rompe en separadores; sin esto, el
// resto del token desaparece a la derecha. Esta variante pre-rompe el
// texto insertando saltos donde la linea supera el ancho disponible.
void selectable_text_wrapped_force(const char* text);

// Variante con printf-format. IM_FMTARGS(1) activa los warnings de
// formato del compilador.
void selectable_text_wrapped_fmt(const char* fmt, ...) IM_FMTARGS(1);

// Texto seleccionable de una sola linea (drop-in de ImGui::Text).
// Sin wrap. Para textos cortos / labels que el usuario quiere copiar.
void selectable_text(const char* text);
void selectable_text_fmt(const char* fmt, ...) IM_FMTARGS(1);

// Variante ligera: dibuja con ImGui::Text/TextWrapped y adjunta un popup
// "Copy" al boton derecho. NO permite seleccion de caracter, pero copia
// el texto completo de un click. Indicado para labels cortas, stats,
// status lines — nada que justifique el coste de InputText.
void text_with_copy(const char* text);
void text_wrapped_with_copy(const char* text);

} // namespace fn_ui
