/**
 * This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus).
 * It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE)
 */

using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using Fungus;

namespace Fungus
{

	[CommandInfo("UI",
	             "Fade UI",
	             "Fades a UI object")]
	public class FadeUI : TweenUI 
	{
		public enum FadeMode
		{
			Alpha,
			Color
		}

		public FadeMode fadeMode = FadeMode.Alpha;

		public ColorData targetColor = new ColorData(Color.white);

		public FloatData targetAlpha = new FloatData(1f);

		protected override void ApplyTween(GameObject go)
		{
			foreach (Image image in go.GetComponentsInChildren<Image>())
			{
				if (duration == 0f)
				{
					switch (fadeMode)
					{
					case FadeMode.Alpha:
						Color tempColor = image.color;
						tempColor.a = targetAlpha;
						image.color = tempColor;
						break;
					case FadeMode.Color:
						image.color = targetColor;
						break;
					}
				}
				else
				{
					switch (fadeMode)
					{
					case FadeMode.Alpha:
						LeanTween.alpha(image.rectTransform, targetAlpha, duration).setEase(tweenType).setEase(tweenType);
						break;
					case FadeMode.Color:
						LeanTween.color(image.rectTransform, targetColor, duration).setEase(tweenType).setEase(tweenType);
						break;
					}
				}
			}

			foreach (Text text in go.GetComponentsInChildren<Text>())
			{
				if (duration == 0f)
				{
					switch (fadeMode)
					{
					case FadeMode.Alpha:
						Color tempColor = text.color;
						tempColor.a = targetAlpha;
						text.color = tempColor;
						break;
					case FadeMode.Color:
						text.color = targetColor;
						break;
					}
				}
				else
				{
					switch (fadeMode)
					{
					case FadeMode.Alpha:
						LeanTween.textAlpha(text.rectTransform, targetAlpha, duration).setEase(tweenType);
						break;
					case FadeMode.Color:
						LeanTween.textColor(text.rectTransform, targetColor, duration).setEase(tweenType);
						break;
					}
				}
			}

			foreach (TextMesh textMesh in go.GetComponentsInChildren<TextMesh>())
			{
				if (duration == 0f)
				{
					switch (fadeMode)
					{
					case FadeMode.Alpha:
						Color tempColor = textMesh.color;
						tempColor.a = targetAlpha;
						textMesh.color = tempColor;
						break;
					case FadeMode.Color:
						textMesh.color = targetColor;
						break;
					}
				}
				else
				{
					switch (fadeMode)
					{
					case FadeMode.Alpha:
						LeanTween.alpha(go, targetAlpha, duration).setEase(tweenType);
						break;
					case FadeMode.Color:
						LeanTween.color(go, targetColor, duration).setEase(tweenType);
						break;
					}
				}
			}
		}

		protected override string GetSummaryValue()
		{
            if (fadeMode == FadeMode.Alpha)
            {
                return targetAlpha.Value.ToString() + " alpha";
            }
            else if (fadeMode == FadeMode.Color)
            {
                return targetColor.Value.ToString()  + " color";
            }

            return "";
        }

		public override bool IsPropertyVisible(string propertyName)
		{
			if (fadeMode == FadeMode.Alpha &&
			    propertyName == "targetColor")
			{
				return false;
			}

			if (fadeMode == FadeMode.Color &&
			    propertyName == "targetAlpha")
			{
				return false;
			}

			return true;
		}
	}

}