// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "CraftingRecipeBook.generated.h"

class UCraftingRecipeDataAsset;

/**
 * La liste ordonnee des recettes du jeu.
 *
 * Un catalogue plutot qu'un scan de l'AssetManager : le contenu est
 * deterministe, rien ne se charge par surprise au runtime, et surtout l'ORDRE
 * d'affichage de la grille devient une donnee de design qu'on regle a la
 * souris. Un scan d'assets rendrait cet ordre dependant du nom des fichiers.
 *
 * Un catalogue plutot qu'une liste posee sur le composant, aussi : un etabli
 * devra pointer son propre livre, et le pawn n'a pas a etre l'endroit ou vit
 * la table de craft du jeu.
 */
UCLASS(BlueprintType)
class EMBERWILD_API UCraftingRecipeBook : public UPrimaryDataAsset
{
	GENERATED_BODY()

public:
	/** L'ordre de ce tableau est l'ordre d'affichage dans la grille de craft. */
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Crafting")
	TArray<TObjectPtr<UCraftingRecipeDataAsset>> Recipes;

	// Pas de UFUNCTION ici : UHT refuse un TObjectPtr en valeur de retour. Le
	// Blueprint lit de toute facon Recipes directement, c'est une UPROPERTY.
	const TArray<TObjectPtr<UCraftingRecipeDataAsset>>& GetRecipes() const { return Recipes; }

#if WITH_EDITOR
	virtual EDataValidationResult IsDataValid(class FDataValidationContext& Context) const override;
#endif
};
