using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D.Animation;
using UnityEngine.UIElements;

namespace Unity.U2D.Animation.Sample
{
    [Serializable]
    internal struct SwapOptionData
    {
        public SpriteResolver spriteResolver;
        public string category;
    }

    internal class PartSwapUI : MonoBehaviour
    {
        [SerializeField]
        SpriteLibrary m_SpriteLibrary;

        [SerializeField]
        SwapOptionData[] m_SwapOptionData;

        void OnEnable()
        {
            var uiDocument = GetComponent<UIDocument>();
            var description = uiDocument.rootVisualElement.Q<Label>("Description");
            description.text = "Different character parts can be swapped by changing the SpriteResolver's Label property on that part.";

            foreach (var swapOption in m_SwapOptionData)
            {
                var libraryAsset = m_SpriteLibrary.spriteLibraryAsset;
                var labels = libraryAsset.GetCategoryLabelNames(swapOption.category);

                var dropdown = uiDocument.rootVisualElement.Q<VisualElement>(swapOption.category).Q<DropdownField>();
                dropdown.choices = new List<string>(labels);
                dropdown.value = swapOption.spriteResolver.GetLabel();
                dropdown.RegisterValueChangedCallback(evt =>
                {
                    swapOption.spriteResolver.SetCategoryAndLabel(swapOption.category, evt.newValue);
                });
            }
        }
    }
}