using UnityEditor;
using UnityEngine.UIElements;

namespace Unity.PlasticSCM.Editor.UI.UIElements
{
    internal static class CursorExtensions
    {
        internal static void SetMouseCursor(this VisualElement visualElement, MouseCursor mouseCursor)
        {
            var cursor = new Cursor();
            var prop = typeof(Cursor).GetProperty("defaultCursorId",
                System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);

            if (prop != null)
            {
                object boxed = cursor;
                prop.SetValue(boxed, (int)mouseCursor);
                cursor = (Cursor)boxed;
            }

            visualElement.style.cursor = new StyleCursor(cursor);
        }

        internal static void SetTextCursor(this TextField textField)
        {
            var textInput = textField.Q("unity-text-input");
            if (textInput == null)
                return;

            textInput.SetMouseCursor(MouseCursor.Text);

            var textElement = textInput.Q<TextElement>();
            if (textElement == null)
                return;

            textElement.SetMouseCursor(MouseCursor.Text);
        }
    }
}