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

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "the_twilight_abyss/BaseItems/Items/BaseItem.h"
#include "Camera/CameraComponent.h"
#include "Engine/PostProcessVolume.h"
#include "TempCharacter.generated.h"

UCLASS()
class THE_TWILIGHT_ABYSS_API ATempCharacter : public ACharacter
{
	GENERATED_BODY()

public:
	// Sets default values for this character's properties
	ATempCharacter();

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

	void ForwardInput(float Axis);
	void RightMoveInput(float Axis);

	UFUNCTION()
	void Sneak();

	UCapsuleComponent* PlayerCapsule;

public:
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Inventory, meta = (AllowPrivateAccess = "true"))
	class UInventoryComponent* Inventory; //Using the InventoryComponent class

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Widgets")
	UUserWidget* ItemSelectorWidget;

	// Called to bind functionality to input
	virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

	void KeyPressed();

	UPROPERTY(EditAnyWhere)
	float TraceDistance = 300;

	void InputDisabler();
	void LineTraceLogic();

	UPROPERTY()
	class UPawnNoiseEmitterComponent* NoiseEmitter;

	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category= "Health")
	float Health;

	UPROPERTY(BlueprintReadWrite, EditAnywhere, Category= "Gold")
	int GoldBalance;

	UPROPERTY(VisibleDefaultsOnly, Category = "LineTrace")
	bool bHit;

	//Using the item in the inventory
	UFUNCTION(BlueprintCallable, Category= "Items")
	void UseItem(class UBaseItem* Item); // Overriding the BaseItem Class

	UFUNCTION(BlueprintCallable)
	void InputEnabler();

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

	FVector OriginalCameraLocation;

	FRotator OriginalCameraRotation;

	int OriginalCameraFOV;

	UFUNCTION(BlueprintCallable, Category= "Items")
	void BuyItem();

	bool bShopKeeperText = false;

	UPROPERTY(BlueprintReadWrite)
	bool disableTab = false;

	APostProcessVolume* PostProcessVolume;

	TArray<AActor*> AIActors;

	FName Enemy;

	FName Ammo;

	UPROPERTY(BlueprintReadWrite)
	float ReactionSpeed = 100.0f;

	bool isInStealth = false;

	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Widgets")
	UUserWidget* ImportantStats;
};