﻿using UnityEditor;

namespace JasonStorey
{
    public abstract class BaseEditor<T> : Editor where T : UnityEngine.Object
    {
        T Item;

        bool _useOriginalInspector;
        void OnEnable()
        {
            Item = (T) target;
        }

        public override void OnInspectorGUI()
        {
            var rect = EditorGUILayout.GetControlRect();
            rect.x = rect.width;
            _useOriginalInspector = EditorGUI.Toggle(rect, _useOriginalInspector);
            
            if(_useOriginalInspector) base.OnInspectorGUI();
            else if(IsRunning)
                DrawRunningInspector(Item);
            else DrawInspector(Item);
        }

        protected virtual void DrawRunningInspector(T item) => DrawInspector(item);

        protected abstract void DrawInspector(T item);

        protected void DrawOriginalInspector() => base.OnInspectorGUI();

        bool IsRunning => EditorApplication.isPlaying;
    }
}