#pragma once

#include "CoreMinimal.h"
#include "StoreSpecialPacksViewInterface.h"
#include "CoreStoreBaseSubTabsWidget.h"
#include "EStoreSpecialPacksScreenState.h"
#include "EStoreSpecialPacksTabState.h"
#include "CoreStoreSpecialPacksWidget.generated.h"

class UCoreStoreSpecialPackDetailsWidget;
class UCoreStoreSpecialPacksListWidget;

UCLASS(Blueprintable, EditInlineNew)
class UCoreStoreSpecialPacksWidget : public UCoreStoreBaseSubTabsWidget, public IStoreSpecialPacksViewInterface
{
	GENERATED_BODY()

protected:
	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreStoreSpecialPackDetailsWidget* DetailsWidget;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreStoreSpecialPacksListWidget* SpecialPacksTab;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreStoreSpecialPacksListWidget* ChapterPacksTab;

	UPROPERTY(BlueprintReadWrite, meta=(BindWidgetOptional))
	UCoreStoreSpecialPacksListWidget* HeritagePacksTab;

	UPROPERTY(BlueprintReadWrite, Transient)
	EStoreSpecialPacksScreenState _currentScreenState;

	UPROPERTY(BlueprintReadWrite, Transient)
	EStoreSpecialPacksTabState _currentSubTab;

public:
	UFUNCTION(BlueprintCallable)
	void SetTabInputsEnabled(const bool isEnabled);

protected:
	UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
	void OnTabsShowAnimationFinished();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
	void OnTabsHideAnimationFinished();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
	void OnDetailsShowAnimationFinished();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
	void OnDetailsHideAnimationFinished();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
	void AnimateShowTabs();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
	void AnimateShowDetails();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
	void AnimateHideTabs();

	UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
	void AnimateHideDetails();

public:
	UCoreStoreSpecialPacksWidget();
};

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