using UnityEngine;
using System;
using System.Collections.Generic;
using mgaia.Utils;

namespace mgaia.tk2d
{
    /// <summary>
    /// Behaviour utilizado para aplicar efeitos de mouse-in e mouse-out em tk2dUIItem's
    /// </summary>
    /// <owner>Victor</owner>
    public class UIItemWithEffects : tk2dUIItem
    {
        private static Dictionary<string, Action<tk2dUIItem, bool>> sEffectsConfigurations = new Dictionary<string, Action<tk2dUIItem, bool>>();

        public string ConfigurationAlias = String.Empty;

        /// <summary>
        /// Adiciona uma configuração de mouse in e mouse out para o alias passado
        /// </summary>
        public static void AddConfiguration(string alias, Action<tk2dUIItem, bool> configuration)
        {
            Assert.AssertTrue(!sEffectsConfigurations.ContainsKey(alias), "Já existe uma configuração de efeitos para o alias de nome " + alias);

            sEffectsConfigurations.Add(alias, configuration);
        }

        protected virtual void Awake()
        {
            OnDown += UIItemWithEffects_OnDown;
            OnUp += UIItemWithEffects_OnUp;
        }

        protected virtual void OnDestroy()
        {
            OnDown -= UIItemWithEffects_OnDown;
            OnUp -= UIItemWithEffects_OnUp;
        }

        private void UIItemWithEffects_OnUp()
        {
            GetConfiguration(ConfigurationAlias)(this, false);
        }

        private void UIItemWithEffects_OnDown()
        {
            GetConfiguration(ConfigurationAlias)(this, true);
        }

        /// <summary>
        /// Retorna a configuração de alias passado
        /// </summary>
        private static Action<tk2dUIItem, bool> GetConfiguration(string alias)
        {
            Assert.AssertTrue(sEffectsConfigurations.ContainsKey(alias), "Não existe uma configuração de efeitos para o alias de nome " + alias);

            return sEffectsConfigurations[alias];
        }
    }
}