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

namespace Fungus
{
	
	[CustomEditor (typeof(Write))]
	public class WriteEditor : CommandEditor
	{
		static public bool showTagHelp;

		protected SerializedProperty textObjectProp;
		protected SerializedProperty textProp;
		protected SerializedProperty descriptionProp;
		protected SerializedProperty clearTextProp;
		protected SerializedProperty textColorProp;
		protected SerializedProperty setAlphaProp;
		protected SerializedProperty setColorProp;
		protected SerializedProperty waitUntilFinishedProp;

		static public void DrawTagHelpLabel()
		{
			string tagsText = "";
			tagsText += "\n";
			tagsText += TextTagParser.GetTagHelp();

			float pixelHeight = EditorStyles.miniLabel.CalcHeight(new GUIContent(tagsText), EditorGUIUtility.currentViewWidth);
			EditorGUILayout.SelectableLabel(tagsText, GUI.skin.GetStyle("HelpBox"), GUILayout.MinHeight(pixelHeight));
		}

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

			textObjectProp = serializedObject.FindProperty("textObject");
			textProp = serializedObject.FindProperty("text");
			descriptionProp = serializedObject.FindProperty("description");
			clearTextProp = serializedObject.FindProperty("clearText");
			textColorProp = serializedObject.FindProperty("textColor");
			setAlphaProp = serializedObject.FindProperty("setAlpha");
			setColorProp = serializedObject.FindProperty("setColor");
			waitUntilFinishedProp = serializedObject.FindProperty("waitUntilFinished");
		}
		
		public override void DrawCommandGUI() 
		{
			serializedObject.Update();

			EditorGUILayout.PropertyField(textObjectProp);
			EditorGUILayout.PropertyField(textProp);
			EditorGUILayout.PropertyField(descriptionProp);

			EditorGUILayout.BeginHorizontal();
			GUILayout.FlexibleSpace();
			if (GUILayout.Button(new GUIContent("Text Tag Help", "View available tags"), new GUIStyle(EditorStyles.miniButton)))
			{
				showTagHelp = !showTagHelp;
			}
			EditorGUILayout.EndHorizontal();

			if (showTagHelp)
			{
				DrawTagHelpLabel();
			}

			EditorGUILayout.PropertyField(clearTextProp);

			EditorGUILayout.PropertyField(textColorProp);
			switch ((Write.TextColor)textColorProp.enumValueIndex)
			{
			case Write.TextColor.Default:
				break;
			case Write.TextColor.SetVisible:
				break;
			case Write.TextColor.SetAlpha:
				EditorGUILayout.PropertyField(setAlphaProp);
				break;
			case Write.TextColor.SetColor:
				EditorGUILayout.PropertyField(setColorProp);
				break;
			}

			EditorGUILayout.PropertyField(waitUntilFinishedProp);

			serializedObject.ApplyModifiedProperties();
		}
	}
	
}