using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Serialization;

namespace UnityEditor.U2D.Animation
{
    /// <summary>
    /// Structure that defines a Sprite Library Category Label
    /// </summary>
    [Serializable]
    public struct SpriteCategoryLabel
    {
        [SerializeField]
        string m_Name;
        [SerializeField]
        string m_SpriteId;

        /// <summary>
        /// Get and set the name for the Sprite label
        /// </summary>
        public string name
        {
            get { return m_Name; }
            set { m_Name = value; }
        }

        /// <summary>
        /// Get and set the Sprite Id.
        /// </summary>
        public string spriteId
        {
            get { return m_SpriteId; }
            set { m_SpriteId = value; }
        }
    }

    /// <summary>
    /// Structure that defines a Sprite Library Category.
    /// </summary>
    [Serializable]
    public struct SpriteCategory
    {
        [SerializeField]
        [FormerlySerializedAs("name")]
        string m_Name;
        [SerializeField]
        List<SpriteCategoryLabel> m_Labels;

        /// <summary>
        /// Get and set the name for the Sprite Category
        /// </summary>
        public string name
        {
            get { return m_Name; }
            set { m_Name = value; }
        }

        /// <summary>
        /// Get and set the Sprites registered to this category.
        /// </summary>
        public List<SpriteCategoryLabel> labels
        {
            get { return m_Labels; }
            set { m_Labels = value; }
        }
    }

    /// <summary>
    /// A structure to hold a collection of SpriteCategory
    /// </summary>
    [Serializable]
    public struct SpriteCategoryList
    {
        [SerializeField]
        [FormerlySerializedAs("categories")]
        List<SpriteCategory> m_Categories;

        /// <summary>
        /// Get or set the a list of SpriteCategory
        /// </summary>
        public List<SpriteCategory> categories
        {
            get { return m_Categories; }
            set { m_Categories = value; }
        }
    }

    /// <summary>An interface that allows Sprite Editor Modules to edit Sprite Library data for user custom importer.</summary>
    /// <remarks>Implement this interface for [[ScriptedImporter]] to leverage on Sprite Editor Modules to edit Sprite Library data.</remarks>
    [Obsolete("The interface is no longer used")]
    public interface ISpriteLibDataProvider
    {
        /// <summary>
        /// Returns the SpriteCategoryList structure that represents the Sprite Library data.
        /// </summary>
        /// <returns>SpriteCategoryList data</returns>
        SpriteCategoryList GetSpriteCategoryList();


        /// <summary>
        /// Sets the SpriteCategoryList structure that represents the Sprite Library data to the data provider
        /// </summary>
        /// <param name="spriteCategoryList">Data to set</param>
        void SetSpriteCategoryList(SpriteCategoryList spriteCategoryList);
    }
}