#pragma once

#include "CoreMinimal.h"
#include "Engine/DataTable.h"
#include "UIStyleTypes.h"
#include "UIStyleTokens.h"
#include "UIStyleRow.generated.h"

/**
 * Struct raiz que agrega todos os tokens de estilo de um tema.
 *
 * Adicionar membros aqui (fase 2/3) é mudança aditiva e segura para a
 * DataTable existente — mas, ao alterar este struct em produção, fazer
 * backup de DT_UI_Styles (UHT invalida rows serializadas se a coluna não
 * preservar valores). Ver ARQUITETURA.md / docs Epic sobre DataTable.
 */
USTRUCT(BlueprintType)
struct ZMMO_API FUIStyle
{
	GENERATED_BODY()

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStylePalette Palette;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStyleSemantic Semantic;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStyleText Text;

	/**
	 * Categorias tipográficas nomeadas (data-driven). O autor define as
	 * chaves aqui no DT_UI_Styles ("Title", "Section", "Body", "Label",
	 * "Dim", ou customizadas); o UUICommonText_Base escolhe pelo nome
	 * (dropdown populado a partir destas chaves — sem enum fixo em C++).
	 */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	TMap<FName, FUITextStyle> TextRoles;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStyleButton Button;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStylePanel Panel;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStyleBorders Borders;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStyleProgressBar ProgressBar;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStyleTooltip Tooltip;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStyleSpinner Spinner;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStyleCheckBox CheckBox;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStyleInput Input;

	/**
	 * Fundo de tela cheia do front-end (ex.: Boot/Login). Brush data-driven:
	 * a tela aplica no seu Border_Bg via RefreshUIStyle — nunca hard-ref no
	 * WBP (ARQUITETURA.md §5). Preenchido em DT_UI_Styles.
	 */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FSlateBrush ScreenBackground;
};

/**
 * Linha de DT_UI_Styles. O Row Name é o ThemeId (ex.: "Default", "RPG"),
 * espelhando DT_ThemeCalendar e ThemeRegistry — assim a camada de estilo
 * é consumidora do ThemeId já resolvido pelo UZMMOThemeSubsystem.
 */
USTRUCT(BlueprintType)
struct ZMMO_API FUIStyleRow : public FTableRowBase
{
	GENERATED_BODY()

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FText DisplayName;

	/** Validação tipada de design-time; runtime resolve por ThemeId/Row Name. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	EUITheme Theme = EUITheme::None;

	/** Ponte para o ThemeId resolvido pelo UZMMOThemeSubsystem. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FName ThemeId;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "UI Style")
	FUIStyle Style;
};
