namespace SRF.UI
{
    using Internal;
    using UnityEngine;

    [ExecuteInEditMode]
    [AddComponentMenu(ComponentMenuPaths.StyleRoot)]
    public sealed class StyleRoot : SRMonoBehaviour
    {
        private StyleSheet _activeStyleSheet;
        public StyleSheet StyleSheet;

        public Style GetStyle(string key)
        {
            if (StyleSheet == null)
            {
                Debug.LogWarning("[StyleRoot] StyleSheet is not set.", this);
                return null;
            }

            return StyleSheet.GetStyle(key);
        }

        private void OnEnable()
        {
            _activeStyleSheet = null;

            if (StyleSheet != null)
            {
                OnStyleSheetChanged();
            }
        }

        private void OnDisable()
        {
            OnStyleSheetChanged();
        }

        private void Update()
        {
            if (_activeStyleSheet != StyleSheet)
            {
                OnStyleSheetChanged();
            }
        }

        private void OnStyleSheetChanged()
        {
            _activeStyleSheet = StyleSheet;

            BroadcastMessage("SRStyleDirty", SendMessageOptions.DontRequireReceiver);
        }

        public void SetDirty()
        {
            _activeStyleSheet = null;
        }
    }
}