using System.Collections.Generic;
using UnityEngine;

#if UNITY_EDITOR
using UnityEditor;
#endif

using Yarn.Unity;

namespace AC.Downloads.YarnIntegration
{

    [System.Serializable]
	public class ActionYarn : Action
	{

		[SerializeField] private int nodeParameterID = -1;
		[SerializeField] private string node;
		[SerializeField] private YarnProject yarnProject = null;
		[SerializeField] private int yarnProjectParameterID = -1;
		private DialogueRunner dialogueRunner;

		public override ActionCategory Category { get { return ActionCategory.Dialogue; } }
		public override string Title { get { return "Yarn"; } }
		public override string Description { get { return "Runs a Yarn node."; } }


		public override void AssignValues (List<ActionParameter> parameters)
		{
			dialogueRunner = UnityVersionHandler.FindObjectOfType <DialogueRunner>();
			node = AssignString (parameters, nodeParameterID, node);
		}


		public override float Run ()
		{
			if (dialogueRunner == null)
			{
				LogWarning ("Cannot find a DialogueRunner component in the scene.");
				return 0f;
			}

			if (!isRunning)
			{
				if (yarnProject && dialogueRunner.YarnProject != yarnProject)
				{
					dialogueRunner.SetProject (yarnProject);
				}

				dialogueRunner.StartDialogue (node);
				isRunning = true;
				return defaultPauseTime;
			}
			
			if (dialogueRunner.IsDialogueRunning)
			{
				return defaultPauseTime;;
			}

			isRunning = false;
			return 0f;
		}

		#if UNITY_EDITOR

		public override void ShowGUI (List<ActionParameter> parameters)
		{
			TextField ("Node:", ref node, parameters, ref nodeParameterID);
			AssetField ("Yarn project (optional):", ref yarnProject, parameters, ref yarnProjectParameterID, "Yarn project (optional):");
		}

		#endif

	}

}