#if UNITY_EDITOR
using FishNet.Managing.Object;
using UnityEditor;
using UnityEngine;

namespace FishNet.Managing.Editing
{
    [CustomEditor(typeof(NetworkManager))]
    public class NetworkManagerEditor : Editor
    {
        private SerializedProperty _logging;
        private SerializedProperty _refreshDefaultPrefabs;
        private SerializedProperty _runInBackground;
        private SerializedProperty _dontDestroyOnLoad;
        private SerializedProperty _persistence;
        private SerializedProperty _spawnablePrefabs;
        private SerializedProperty _objectPool;

        private void OnEnable()
        {
            _logging = serializedObject.FindProperty("_logging");
            _refreshDefaultPrefabs = serializedObject.FindProperty("_refreshDefaultPrefabs");
            _runInBackground = serializedObject.FindProperty("_runInBackground");
            _dontDestroyOnLoad = serializedObject.FindProperty("_dontDestroyOnLoad");
            _persistence = serializedObject.FindProperty("_persistence");
            _spawnablePrefabs = serializedObject.FindProperty("_spawnablePrefabs");
            _objectPool = serializedObject.FindProperty("_objectPool");
        }

        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            NetworkManager networkManager = (NetworkManager)target;

            GUI.enabled = false;
            EditorGUILayout.ObjectField("Script:", MonoScript.FromMonoBehaviour(networkManager), typeof(NetworkManager), false);
            GUI.enabled = true;

            // EditorGUILayout.BeginVertical(GUI.skin.box);
            // EditorGUILayout.EndVertical();


            EditorGUILayout.LabelField("Settings", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;
            EditorGUILayout.PropertyField(_runInBackground);
            EditorGUILayout.PropertyField(_dontDestroyOnLoad);
            EditorGUILayout.PropertyField(_persistence);
            EditorGUILayout.Space();
            EditorGUI.indentLevel--;

            EditorGUILayout.LabelField("Logging", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;
            EditorGUILayout.PropertyField(_logging);
            EditorGUILayout.Space();
            EditorGUI.indentLevel--;

            EditorGUILayout.LabelField("Prefabs", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;
            EditorGUILayout.PropertyField(_spawnablePrefabs);
            EditorGUILayout.PropertyField(_objectPool);
            EditorGUILayout.PropertyField(_refreshDefaultPrefabs);

            EditorGUI.indentLevel--;
            EditorGUILayout.Space();

            serializedObject.ApplyModifiedProperties();
        }
    }
}
#endif