using AV.Inspector.Runtime;
using D2D.Core;
using D2D.Utilities;
using D2D.Utils;
using UnityEditor;
using UnityEngine;
using UnityEngine.UIElements;

namespace D2D.Gameplay
{
    [CustomEditor(typeof(Health))]
    public class HealthEditor : SuperEditor
    {
        public override void OnInspectorGUI()
        {
            BeginSerialization();

            var health = (Health) target;

            // Show max points or data
            ShowProperty(health.isHealthDataMode ? "_healthData" : "_maxPoints", 
                health.isHealthDataMode ? "Data" : "Max Points");
            
            // Show current points
            if (Application.isPlaying)
                ReadOnlyLine("Current points", health.CurrentPoints.ToString());

            // Show health effects (if needed)
            if (health.particlesAreEnabled)
            {
                Space(10);
                ShowProperty("_hitEffect", "Hit Effect");
                ShowProperty("_deathEffect", "Death Effect");
                ShowProperty("_meshRenderer", "Mesh Renderer");
                ShowProperty("gradient", "Gradient");
            }
            
            ShowProperty("_isGrayFadeout", "Is Gray Fadeout");
            ShowProperty("_isPlayer", "Is Player");

            EndSerialization();
        }
        
        [InitializeOnInspector]
        private static void OnInspector()
        {
            SmartInspector.OnSetupEditorElement += x =>
            {
                if (!(x.target is Health target))
                    return;

                var icons = CoreSettings.Instance.tools.icons;
                x.NewFastToolbarToggle(icons.effects, nameof(target.particlesAreEnabled));
                x.NewFastToolbarToggle(icons.data, nameof(target.isHealthDataMode));
            };
        }
    }
}