using System;
using System.Collections.Generic;

namespace UnityEngine.U2D.Animation
{
    internal class SpriteSkinContainer : ScriptableObject
    {
        public static event Action<SpriteSkin> onAddedSpriteSkin;
        public static event Action<SpriteSkin> onRemovedSpriteSkin;
        public static event Action<SpriteSkin> onBoneTransformChanged;

        static SpriteSkinContainer s_Instance;

        public static SpriteSkinContainer instance
        {
            get
            {
                if (s_Instance == null)
                {
                    var managers = Resources.FindObjectsOfTypeAll<SpriteSkinContainer>();
                    if (managers.Length > 0)
                        s_Instance = managers[0];
                    else
                        s_Instance = CreateInstance<SpriteSkinContainer>();
                    s_Instance.hideFlags = HideFlags.HideAndDontSave;
                }

                return s_Instance;
            }
        }

        List<SpriteSkin> m_SpriteSkin = new List<SpriteSkin>();
        public IReadOnlyList<SpriteSkin> spriteSkins => m_SpriteSkin;

        public void AddSpriteSkin(SpriteSkin spriteSkin)
        {
            m_SpriteSkin.Add(spriteSkin);

            onAddedSpriteSkin?.Invoke(spriteSkin);
        }

        public void RemoveSpriteSkin(SpriteSkin spriteSkin)
        {
            m_SpriteSkin.Remove(spriteSkin);

            onRemovedSpriteSkin?.Invoke(spriteSkin);
        }

        public void BoneTransformsChanged(SpriteSkin spriteSkin)
        {
            onBoneTransformChanged?.Invoke(spriteSkin);
        }
    }
}