using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XNode;
using RPGCreationKit.BehaviourTree;

namespace RPGCreationKit.BehaviourTree
{
    [CreateNodeMenu("RPGCK_BehaviourTree/ActionNode", order = 1)]
    [System.Serializable]
    public class ActionNode : BTNode 
	{
        public string debugs = "";
        public bool executionGoesWell = false;

        public float startTime = 0;
        public float timer = 0f;

		// Use this for initialization
		protected override void Init()
        {
			base.Init();
		}

		// Return the correct value of an output port when requested
		public override object GetValue(NodePort port)
        {
			return null; // Replace this
		}

        public override NodeState Execute()
        {
            if (m_NodeState == NodeState.Success || m_NodeState == NodeState.Failure)
                if (hasEvaluated == true)
                    return m_NodeState;

            if (!STARTED)
                OnStart();

            startTime += 1 * Time.deltaTime;
            if (startTime >= timer)
            {
                if(!string.IsNullOrEmpty(debugs))
                    Debug.Log(debugs);


                m_NodeState = (executionGoesWell) ? NodeState.Success : NodeState.Failure;
                return m_NodeState;
            }

            hasEvaluated = true;

            m_NodeState = NodeState.Running;
            return m_NodeState;
        }

        public override void ReEvaluate()
        {
            if (m_NodeState != NodeState.Running)
            {
                base.ReEvaluate();
                OnStart();
            }
        }


        public override void OnRemoveConnection(NodePort port)
        {
            base.OnRemoveConnection(port);
            indexInSequence = -1;
        }

        public override void OnStart()
        {
            STARTED = true;
            startTime = 0;
        }
    }
}