using System.Reflection;
using AV.Inspector.Runtime;
using AV.UITK;
using HarmonyLib;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;

namespace AV.Inspector
{
    internal class InspectorSettingsProvider : SettingsProvider
    {
        const string Title = "Smart Inspector";
        const string UIPath = "Preferences/Open Labs/Smart Inspector";
        
        static PropertyInfo settingsWindowInfo = AccessTools.Property(typeof(SettingsProvider), "settingsWindow");
        
        [SettingsProvider]
        public static SettingsProvider CreateProvider() => new InspectorSettingsProvider(UIPath, SettingsScope.User);

        InspectorSettingsProvider(string path, SettingsScope scope) : base(path, scope) {}
        
        
        public override void OnActivate(string searchContext, VisualElement root)
        {
            var window = (EditorWindow)settingsWindowInfo.GetValue(this);
            window.SetAntiAliasing(8);
            
            var prefs = InspectorPrefs.LoadFromUserData();

            var ui = new InspectorPrefsUI(prefs);
            
            root.Add(CreateBigTitle());
            root.Add(ui);
        }

        Label CreateBigTitle()
        {
            return new Label(Title).Fluent().FontSize(19).FontStyle(FontStyle.Bold).Grow(0).Padding(2, 9, 2).Margin(bottom: 2);
        }
    }
}