#if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using FishNet.Configuring;
using UnitySettingsProviderAttribute = UnityEditor.SettingsProviderAttribute;
using UnitySettingsProvider = UnityEditor.SettingsProvider;
using System.Collections.Generic;
namespace FishNet.Configuring.Editing
{
    internal static class SettingsProvider
    {
        private static Vector2 _scrollView;
        [UnitySettingsProvider]
        private static UnitySettingsProvider Create()
        {
            return new UnitySettingsProvider("Project/Fish-Networking/Configuration", SettingsScope.Project)
            {
                label = "Configuration",
                guiHandler = OnGUI,
                keywords = new string[]
                {
                    "Fish",
                    "Networking",
                    "Configuration",
                },
            };
        }
        private static void OnGUI(string searchContext)
        {
            ConfigurationData configuration = Configuration.LoadConfigurationData();
            if (configuration == null)
            {
                EditorGUILayout.HelpBox("Unable to load configuration data.", MessageType.Error);
                return;
            }
            EditorGUI.BeginChangeCheck();
            GUIStyle scrollViewStyle = new GUIStyle()
            {
                padding = new RectOffset(10, 10, 10, 10),
            };
            _scrollView = GUILayout.BeginScrollView(_scrollView, scrollViewStyle);
            EditorGUILayout.BeginHorizontal();
            GUIStyle toggleStyle = new GUIStyle(EditorStyles.toggle)
            {
                richText = true,
            };
            configuration.CodeStripping.StripReleaseBuilds = GUILayout.Toggle(configuration.CodeStripping.StripReleaseBuilds, $"{ObjectNames.NicifyVariableName(nameof(configuration.CodeStripping.StripReleaseBuilds))} (Pro Only)", toggleStyle);
            EditorGUILayout.EndHorizontal();
            if (configuration.CodeStripping.StripReleaseBuilds)
            {
                EditorGUI.indentLevel++;
                //Stripping Method.
                List enumStrings = new List();
                foreach (string item in System.Enum.GetNames(typeof(StrippingTypes)))
                    enumStrings.Add(item);
                configuration.CodeStripping.StrippingType = EditorGUILayout.Popup($"{ObjectNames.NicifyVariableName(nameof(configuration.CodeStripping.StrippingType))}", (int)configuration.CodeStripping.StrippingType, enumStrings.ToArray());
                EditorGUILayout.HelpBox("Development builds will not have code stripped. Additionally, if you plan to run as host disable code stripping.", MessageType.Warning);
                EditorGUI.indentLevel--;
            }
            GUILayout.EndScrollView();
            if (EditorGUI.EndChangeCheck()) Configuration.Configurations.Write(true);
        }
    }
}
#endif