using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using HarmonyLib;
using UnityEditor;
using static System.Linq.Expressions.Expression;
using Object = UnityEngine.Object;

namespace AV.Inspector
{
    internal enum InspectorMode
    {
        Default = 0,
        Debug = 1,
        DebugInternal = 2
    }
    
    [InitializeOnLoad]
    internal static class InspectorWindowRef
    {
        internal static Type type { get; } = Type.GetType("UnityEditor.InspectorWindow, UnityEditor");
        
        static PropertyInfo inspectorModeProperty = AccessTools.Property(type, "inspectorMode");
        
        
        static InspectorWindowRef()
        {
        }

        
        public static void SwitchDebugMode(EditorWindow inspector)
        {
            var mode = GetInspectorMode(inspector);
            SetInspectorMode(inspector, mode == InspectorMode.Default ? InspectorMode.Debug : InspectorMode.Default);
        }
        
        public static InspectorMode GetInspectorMode(EditorWindow inspector)
        {
            return (InspectorMode)inspectorModeProperty.GetValue(inspector);
        }
        
        public static void SetInspectorMode(EditorWindow inspector, InspectorMode mode)
        {
            inspectorModeProperty.SetValue(inspector, (int)mode);
        }
    }
}