#pragma once

#include "CoreMinimal.h"
#include "CommonTextBlock.h"
#include "UICommonText_Base.generated.h"

/**
 * Texto compartilhado do ZMMO. Subclasse de UCommonTextBlock (leaf, usado
 * direto na árvore). A categoria tipográfica NÃO é um enum fixo: é um nome
 * (FName) resolvido contra o mapa FUIStyle.TextRoles do DT_UI_Styles via
 * UZMMOThemeSubsystem — o dropdown do Details é populado a partir do DT
 * (GetOptions). Data-driven, sem struct/enum pré-definido (pedido do autor).
 *
 * Fallback: se a chave não existir no mapa, cai nas categorias clássicas de
 * FUIStyle.Text (Title/Section/Body/Button/Label/Dim) — assim já renderiza
 * com as fontes do tema (FF_Cinzel/FF_Rajdhani) mesmo antes do mapa ser
 * preenchido no DT.
 */
UCLASS(Blueprintable)
class ZMMO_API UUICommonText_Base : public UCommonTextBlock
{
	GENERATED_BODY()

public:
	/**
	 * Nome da categoria tipográfica (chave de FUIStyle.TextRoles no
	 * DT_UI_Styles). O dropdown é populado pelo DT — ver GetTextRoleOptions.
	 */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "UI Style",
		meta = (GetOptions = "GetTextRoleOptions"))
	FName TextRole = TEXT("Body");

	/** Re-resolve o tema ativo e reaplica fonte/cor (chamar em troca de tema). */
	UFUNCTION(BlueprintCallable, Category = "UI Style")
	void RefreshUIStyle();

	/** Opções do dropdown de TextRole — lidas do DT_UI_Styles (data-driven). */
	UFUNCTION()
	TArray<FString> GetTextRoleOptions() const;

	/**
	 * Mesma lista (clássicas + chaves do DT) reutilizável por outras bases
	 * que expõem um TextRole na raiz (ex.: UUICheckBox_Base, UUIInput_Base).
	 */
	static TArray<FString> GetThemeTextRoleOptions();

protected:
	virtual void SynchronizeProperties() override;
};
