// FlexiMotion // https://kybernetik.com.au/flexi-motion // Copyright 2023-2025 Kybernetik //

#if UNITY_EDITOR

using FlexiMotion.Modifiers;
using System;
using UnityEditor;

namespace FlexiMotion.Editor
{
    /// <summary>[Editor-Only] A custom editor for <see cref="SphereCollidersModifier"/> components.</summary>
    /// https://kybernetik.com.au/flexi-motion/api/FlexiMotion.Editor/SphereCollidersModifierEditor
    /// 
    [CustomEditor(typeof(SphereCollidersModifier), true)]
    public class SphereCollidersModifierEditor : UnityEditor.Editor
    {
        /************************************************************************************************************************/

        [NonSerialized] private SerializedProperty _FirstProperty;

        /************************************************************************************************************************/

        private readonly Action<SerializedProperty> OnEditButton;

        /// <summary>Creates a new <see cref="FlexiMotionEditor"/>.</summary>
        public SphereCollidersModifierEditor()
        {
            OnEditButton = property => SphereColliderDefinitionsWindow
                .Open<SphereColliderDefinitionsWindow>((SphereCollidersModifier)target);
        }

        /************************************************************************************************************************/

        /// <summary>Initializes this editor.</summary>
        protected virtual void OnEnable()
        {
            _FirstProperty = serializedObject.FindProperty(FlexiMotionModifier.TargetFieldName);
        }

        /************************************************************************************************************************/

        /// <inheritdoc/>
        public override void OnInspectorGUI()
        {
            try
            {
                EditableFieldDrawer.OnEdit += OnEditButton;

                FMEditorGUI.DrawPropertyFields(_FirstProperty);
            }
            finally
            {
                EditableFieldDrawer.OnEdit -= OnEditButton;
            }
        }

        /************************************************************************************************************************/
    }
}

#endif

