#pragma once

#include "CoreMinimal.h"
#include "LobbyCharactersSubTabSubPresenter.h"
#include "ESortingOption.h"
#include "ESortingOrder.h"
#include "StoreCharactersFiltersData.h"
#include "ECustomizationCategory.h"
#include "LobbyCharactersCustomizationsSubPresenter.generated.h"

class UCharacterSelectionManager;
class UCustomizationSelectionManager;

UCLASS(Blueprintable)
class ULobbyCharactersCustomizationsSubPresenter : public ULobbyCharactersSubTabSubPresenter
{
	GENERATED_BODY()

private:
	UPROPERTY(BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	UCharacterSelectionManager* _characterSelectionManager;

	UPROPERTY(BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	UCustomizationSelectionManager* _customizationSelectionManager;

private:
	UFUNCTION()
	void OnSortingChanged(const ESortingOption sortingType, const ESortingOrder sortingOrder);

	UFUNCTION(BlueprintCallable)
	void OnSearchBarTextChanged(const FString& enteredText);

	UFUNCTION(BlueprintCallable)
	void OnPresetSelected(const int32 presetId);

	UFUNCTION(BlueprintCallable)
	void OnFiltersChanged(const FStoreCharactersFiltersData& filtersData);

	UFUNCTION(BlueprintCallable)
	void OnCustomizationTimerExpired();

	UFUNCTION(BlueprintCallable)
	void OnCustomizationSelectedAgain(const FName customizationId);

	UFUNCTION(BlueprintCallable)
	void OnCustomizationSelected(const FName customizationId);

	UFUNCTION(BlueprintCallable)
	void OnClearFiltersClicked();

	UFUNCTION(BlueprintCallable)
	void OnCharmSlotSelected(const int32 slotIndex);

	UFUNCTION(BlueprintCallable)
	void OnCategorySelectedAgain(const ECustomizationCategory category);

	UFUNCTION(BlueprintCallable)
	void OnCategorySelected(const ECustomizationCategory category);

public:
	ULobbyCharactersCustomizationsSubPresenter();
};

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