#pragma once

#include "CoreMinimal.h"
#include "Presenter.h"
#include "Templates/SubclassOf.h"
#include "ELoadingScreenType.h"
#include "LoadingScreenPresenter.generated.h"

class UUserWidget;
class ULoadingScreenSimpleSubPresenter;
class ULoadingScreenRegularSubPresenter;
class ULoadingScreenSpecialEventSubPresenter;
class ULoadingScreenLimitedTimeEventSubPresenter;
class ULoadingScreenSubPresenter;

UCLASS(Blueprintable, EditInlineNew)
class DBDUIPRESENTERS_API ULoadingScreenPresenter : public UPresenter
{
	GENERATED_BODY()

public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TSubclassOf<UUserWidget> LoadingScreenWidgetClass;

protected:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float LoadingHintDelay;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float LoadingHintDuration;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<int32> LoadingHintLengthThresholds;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	float LoadingHintDurationPerLengthThreshold;

	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	ELoadingScreenType _activeLoadingScreenType;

private:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	ULoadingScreenSimpleSubPresenter* _loadingScreenSimpleSubPresenter;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	ULoadingScreenRegularSubPresenter* _loadingScreenRegularSubPresenter;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	ULoadingScreenSpecialEventSubPresenter* _loadingScreenSpecialSubPresenter;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	ULoadingScreenLimitedTimeEventSubPresenter* _loadingScreenLimitedTimeEventSubPresenter;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Transient, meta=(AllowPrivateAccess=true))
	ULoadingScreenSubPresenter* _activeLoadingScreenSubPresenter;

public:
	ULoadingScreenPresenter();
};

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