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

#pragma once

#include "CoreMinimal.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/Actor.h"
#include "the_twilight_abyss/PlayerTemp/TempCharacter.h"
#include "Interaction.generated.h"

UCLASS()
class THE_TWILIGHT_ABYSS_API AInteraction : public AActor
{
	GENERATED_BODY()

public:
	// Sets default values for this actor's properties
	AInteraction();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:
	// Called every frame
	virtual void Tick(float DeltaTime) override;
	
	UPROPERTY(EditAnywhere, Category= "Widgets")
	TSubclassOf<UUserWidget> ShopDialog;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category= "Widgets")
	TSubclassOf<UUserWidget> ItemSelector;

	UPROPERTY(EditAnywhere, Category = "Widgets")
	TSubclassOf<UUserWidget> BuyBuffText;

	UPROPERTY(EditAnywhere, Category = "Widgets")
	TSubclassOf<UUserWidget> BuyHealingText;

	virtual void OnInteract();

	UFUNCTION(BlueprintCallable)
	virtual void RemoveWidget();
	
	UPROPERTY()
	UUserWidget* ShopDialogWidget;

	UPROPERTY()
	UUserWidget* ItemSelectorWidget;

	UPROPERTY()
	UUserWidget* BuyBuffTextWidget;
	
	UPROPERTY()
	UUserWidget* BuyHealingTextWidget;
	
	UPROPERTY(EditAnywhere, Category= "Widgets")
	float WaitTimer = 8.0f;

	UPROPERTY()
	bool bisDisabled = false;

	UPROPERTY()
	bool bDisableShopDialMove = false;
	

	UFUNCTION(BlueprintCallable, Category= "ButtonLeft")
	virtual void CameraLeftMover();

	UFUNCTION(BlueprintCallable, Category= "ButtonLeft")
	virtual void CameraRightMover();

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Camera")
	UCameraComponent* MainCamera;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Items")
	AActor* HealingItem;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Items")
	AActor* BuffItem;

	UFUNCTION(BlueprintCallable, Category = "ConfirmButtons")
	virtual void CancelPurchase();

	UFUNCTION(BlueprintCallable, Category = "ConfirmButtons")
	virtual void ExitScreen();

	UPROPERTY(EditAnywhere, Category = "Player")
	ATempCharacter* TempCharacterRef;
	
private:
	
	FVector TargetHealingLocation;
	FVector TargetBuffLocation;
	FVector CameraLocation;

	FProperty* Property;
	FProperty* BuyBuffProperty;
	FProperty* BuyHealingProperty;
};