using GhostEnums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;

namespace QSB.EchoesOfTheEye.Ghosts.Actions;

public class QSBElevatorWalkAction : QSBGhostAction
{
	private bool _reachedEndOfPath;

	private bool _calledToElevator;

	private bool _hasUsedElevator;

	private GhostNode _elevatorNode;

	public bool reachedEndOfPath
	{
		get
		{
			return this._reachedEndOfPath;
		}
	}

	public override GhostAction.Name GetName()
	{
		return GhostAction.Name.ElevatorWalk;
	}

	public override float CalculateUtility()
	{
		if (this._calledToElevator && !this._hasUsedElevator && (_data.interestedPlayer == null || !this._data.interestedPlayer.isPlayerLocationKnown))
		{
			return 100f;
		}

		if (this._calledToElevator && !this._hasUsedElevator)
		{
			return 70f;
		}

		return -100f;
	}

	public void UseElevator()
	{
		this._hasUsedElevator = true;
	}

	public void CallToUseElevator()
	{
		this._calledToElevator = true;
		if (this._controller.AttachedObject.GetNodeMap().GetPathNodes().Length > 1)
		{
			this._elevatorNode = this._controller.AttachedObject.GetNodeMap().GetPathNodes()[1];
			this._controller.PathfindToNode(this._elevatorNode, MoveType.PATROL);
			return;
		}
		Debug.LogError("MissingElevatorNode");
	}

	protected override void OnEnterAction()
	{
		this._controller.SetLanternConcealed(true, true);
		this._controller.FaceVelocity();
		this._effects.PlayDefaultAnimation();
		this._effects.SetMovementStyle(GhostEffects.MovementStyle.Normal);
		if (this._elevatorNode != null)
		{
			this._controller.PathfindToNode(this._elevatorNode, MoveType.PATROL);
		}
	}

	protected override void OnExitAction()
	{
	}

	public override bool Update_Action()
	{
		return true;
	}

	public override void OnArriveAtPosition()
	{
		this._reachedEndOfPath = true;
	}
}