using UnityEditor;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

namespace Fungus
{
	[CustomEditor (typeof(InvokeEvent))]
	public class InvokeEventEditor : CommandEditor 
	{
		protected SerializedProperty delayProp;
		protected SerializedProperty invokeTypeProp;
		protected SerializedProperty staticEventProp;
		protected SerializedProperty booleanParameterProp;
		protected SerializedProperty booleanEventProp;
		protected SerializedProperty integerParameterProp;
		protected SerializedProperty integerEventProp;
		protected SerializedProperty floatParameterProp;
		protected SerializedProperty floatEventProp;
		protected SerializedProperty stringParameterProp;
		protected SerializedProperty stringEventProp;

		protected virtual void OnEnable()
		{
			if (NullTargetCheck()) // Check for an orphaned editor instance
				return;

			delayProp = serializedObject.FindProperty("delay");
			invokeTypeProp = serializedObject.FindProperty("invokeType");
			staticEventProp = serializedObject.FindProperty("staticEvent");
			booleanParameterProp = serializedObject.FindProperty("booleanParameter");
			booleanEventProp = serializedObject.FindProperty("booleanEvent");
			integerParameterProp = serializedObject.FindProperty("integerParameter");
			integerEventProp = serializedObject.FindProperty("integerEvent");
			floatParameterProp = serializedObject.FindProperty("floatParameter");
			floatEventProp = serializedObject.FindProperty("floatEvent");
			stringParameterProp = serializedObject.FindProperty("stringParameter");
			stringEventProp = serializedObject.FindProperty("stringEvent");
		}

		public override void DrawCommandGUI()
		{
			serializedObject.Update();

			EditorGUILayout.PropertyField(delayProp);
			EditorGUILayout.PropertyField(invokeTypeProp);

			switch ((InvokeEvent.InvokeType)invokeTypeProp.enumValueIndex)
			{
			case InvokeEvent.InvokeType.Static:
				EditorGUILayout.PropertyField(staticEventProp);
				break;
			case InvokeEvent.InvokeType.DynamicBoolean:
				EditorGUILayout.PropertyField(booleanEventProp);
				EditorGUILayout.PropertyField(booleanParameterProp);
				break;
			case InvokeEvent.InvokeType.DynamicInteger:
				EditorGUILayout.PropertyField(integerEventProp);
				EditorGUILayout.PropertyField(integerParameterProp);
				break;
			case InvokeEvent.InvokeType.DynamicFloat:
				EditorGUILayout.PropertyField(floatEventProp);
				EditorGUILayout.PropertyField(floatParameterProp);
				break;
			case InvokeEvent.InvokeType.DynamicString:
				EditorGUILayout.PropertyField(stringEventProp);
				EditorGUILayout.PropertyField(stringParameterProp);
				break;
			}

			serializedObject.ApplyModifiedProperties();
		}
	}
}