using UnityEngine;
using System.Collections;
using UnityEngine.Events;

[AddComponentMenu("Playground/Conditions/Condition Area")]
public class ConditionArea : ConditionBase
{
	// the amount of times (in seconds) that this Condition will call OnTriggerStay
	// i.e. if it's 1, it means that OnTriggerStay will be called every second
	// i.e. if it's 4, it means that it will be called every 4 seconds
	// ... and so on...
	public float frequency = 1f;
	//not used in case of ColliderEventTypes.Enter and ColliderEventTypes.Exit


	//the type of event to check for
	[Header("Type of Event")]
	public ColliderEventTypes eventType = ColliderEventTypes.Enter;



	private float lastTimeTriggerStayCalled;


	// This function will be called at the beginning
	void Start()
	{
		lastTimeTriggerStayCalled = -frequency;
	}


	//This will create a dialog window asking for which dialog to add
	private void Reset()
	{
		Utils.Collider2DDialogWindow(this.gameObject, true);
	}
	


	//this function is called every time another collider enters this trigger
	private void OnTriggerEnter2D(Collider2D otherCollider)
	{
		//is this the type of event we need?
		if(eventType == ColliderEventTypes.Enter)
		{

			//check for the tag of the object which entered the area, if necessary
			if(otherCollider.CompareTag(filterTag)
				|| !filterByTag)
			{
				ExecuteAllActions(otherCollider.gameObject);
			}
		}
	}



	// This will be called EVERY FRAME when something stays inside the trigger collider
	void OnTriggerStay2D(Collider2D otherCollider)
	{
		//is this the type of event we need?
		if(eventType == ColliderEventTypes.StayInside
			&& Time.time >= lastTimeTriggerStayCalled + frequency) //check also the frequency
		{
			
			//check for the tag of the object which entered the area, if necessary
			if(otherCollider.CompareTag(filterTag)
				|| !filterByTag)
			{
				ExecuteAllActions(otherCollider.gameObject);
				lastTimeTriggerStayCalled = Time.time;
			}
		}
	}



	//this function is called every time another collider exits this trigger
	private void OnTriggerExit2D(Collider2D otherCollider)
	{
		//is this the type of event we need?
		if(eventType == ColliderEventTypes.Exit)
		{

			//check for the tag of the object which entered the area, if necessary
			if(otherCollider.CompareTag(filterTag)
				|| !filterByTag)
			{
				ExecuteAllActions(otherCollider.gameObject);
			}
		}
	}



	public enum ColliderEventTypes
	{
		Enter,
		Exit,
		StayInside
	}



}
