#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "SettingsCategory.h"
#include "SettingsId.h"
#include "SettingsOptionData.h"
#include "SettingsViewDataManager.generated.h"

class USettingsCategoryViewData;
class USettingsOptionViewData;
class UInputBindingManager;

UCLASS(Blueprintable)
class DBDUIPRESENTERS_API USettingsViewDataManager : public UObject
{
	GENERATED_BODY()

public:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient)
	TMap<SettingsCategory, USettingsCategoryViewData*> CategoriesViewDataMap;

	UPROPERTY(EditInstanceOnly, Transient)
	TMap<SettingsId, USettingsOptionViewData*> OptionsViewDataMap;

	UPROPERTY(EditInstanceOnly, Transient)
	TMap<SettingsId, FSettingsOptionData> OptionDataMap;

private:
	UPROPERTY(EditInstanceOnly, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	UInputBindingManager* _inputBindingManager;

public:
	UFUNCTION(BlueprintCallable)
	void OnOptionChanged(USettingsOptionViewData* updatedViewData);

public:
	USettingsViewDataManager();
};

FORCEINLINE uint32 GetTypeHash(const USettingsViewDataManager) { return 0; }
