// Icon Studio - Mathew Simon

#pragma once

#include "CoreMinimal.h"
#include "Engine/DeveloperSettings.h"
#include "IconStudioSettings.generated.h"

/**
 * Le pont entre l'outil et les DataAssets du jeu.
 *
 * Le plugin ne connait volontairement aucune classe du projet : il ne compile
 * pas contre UItemDataAsset et n'inclut aucun de ses en-tetes. Il retrouve le
 * mesh et le champ d'icone par REFLEXION, a partir des noms de proprietes
 * donnes ici. C'est ce qui lui permet de servir tel quel a un autre projet, ou
 * a une autre famille d'assets dans celui-ci -- il suffit de changer deux noms.
 *
 * Les valeurs par defaut correspondent a UItemDataAsset.
 */
UCLASS(config = Editor, defaultconfig, meta = (DisplayName = "Icon Studio"))
class ICONSTUDIO_API UIconStudioSettings : public UDeveloperSettings
{
	GENERATED_BODY()

public:
	UIconStudioSettings();

	virtual FName GetContainerName() const override { return TEXT("Project"); }
	virtual FName GetCategoryName() const override { return TEXT("Plugins"); }

	/**
	 * Proprietes ou chercher le mesh a rendre, dans l'ordre.
	 * La premiere qui existe et pointe vers un StaticMesh gagne.
	 */
	UPROPERTY(config, EditAnywhere, Category = "Data Asset Binding")
	TArray<FName> MeshPropertyNames;

	/** Propriete ou chercher un materiau qui remplace celui du mesh. Vide pour ne pas en chercher. */
	UPROPERTY(config, EditAnywhere, Category = "Data Asset Binding")
	FName MaterialOverridePropertyName;

	/** Propriete Texture2D a remplir avec l'icone generee. */
	UPROPERTY(config, EditAnywhere, Category = "Data Asset Binding")
	FName IconPropertyName;

	/**
	 * Propriete servant a nommer l'asset produit (un FName ou un FString).
	 * Vide, ou introuvable, on retombe sur le nom de l'asset source.
	 */
	UPROPERTY(config, EditAnywhere, Category = "Data Asset Binding")
	FName DisplayNamePropertyName;

	/**
	 * Sauve les packages modifies a la fin d'un lot.
	 *
	 * Decoche, les textures generees et les DataAssets modifies restent
	 * seulement en memoire : un editeur ferme sans Save All perd tout le lot.
	 */
	UPROPERTY(config, EditAnywhere, Category = "Batch")
	bool bSaveModifiedPackages = true;
};
