// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.

using UnityEngine;

namespace HutongGames.PlayMaker.Actions
{
	[ActionCategory(ActionCategory.GameObject)]
	[Tooltip("Finds a Game Object by Name and/or Tag.")]
	public class FindGameObject : FsmStateAction
	{
        [Tooltip("The name of the GameObject to find. You can leave this empty if you specify a Tag.")]
		public FsmString objectName;

		[UIHint(UIHint.Tag)]
        [Tooltip("Find a GameObject with this tag. If Object Name is specified then both name and Tag must match.")]
		public FsmString withTag;

		[RequiredField]
		[UIHint(UIHint.Variable)]
        [Tooltip("Store the result in a GameObject variable.")]
		public FsmGameObject store;

		public override void Reset()
		{
			objectName = "";
			withTag = "Untagged";
			store = null;
		}

		public override void OnEnter()
		{
			Finish();

			if (withTag.Value != "Untagged")
			{
				if (!string.IsNullOrEmpty(objectName.Value))
				{
					var possibleGameObjects = GameObject.FindGameObjectsWithTag(withTag.Value);

					foreach (var go in possibleGameObjects)
					{
						if (go.name == objectName.Value)
						{
							store.Value = go;
							return;
						}
					}

					store.Value = null;
					return;
				}

				store.Value = GameObject.FindGameObjectWithTag(withTag.Value);
				return;
			}

			store.Value = GameObject.Find(objectName.Value);
		}

		public override string ErrorCheck()
		{
			if (string.IsNullOrEmpty(objectName.Value) && string.IsNullOrEmpty(withTag.Value))
			{
			    return "Specify Name, Tag, or both.";
			}

			return null;
		}

	}
}