private void DrawDebug()
        {
            GUILayout.Space(150);
            debugEditorFoldout = EditorGUILayout.Foldout(debugEditorFoldout, "< Debug >");
            if (debugEditorFoldout)
            {
                //  -- Debug
                using (new EditorGUILayout.HorizontalScope())
                {
                    if (GUILayout.Button(" Print Root Selector ", EditorStyles.miniButton, GUILayout.Height(18)))
                    {
                        Debug.Log(currentClient.configuration.rootSelector + "\n" + currentClient.configuration.rootSelector.qualifiers.Count);
                        //Debug.Log(currentClient.configuration.selector + "\n" + currentClient.configuration.selector.qualifiers.Count);
                        //Debug.Log(serializedObject.FindProperty("configuration.selector").type);
                    }

                    if (GUILayout.Button("Debug AI RootSelector Properties", EditorStyles.miniButton, GUILayout.Height(18)))
                    {
                        Debug.Log("Active Client" + currentClient.configuration.rootSelector.GetType());
                        var entity = currentClient.configuration.rootSelector;
                        var obj    = TaskNetworkUtilities.GetAllProperties(entity);
                        foreach (PropertyInfo info in obj)
                        {
                            //info.GetValue(entity);
                            //Debug.Log(info.GetValue(entity).GetType());
                            //Debug.Log(info.GetValue(entity));
                        }
                    }
                }

                EditorGUILayout.Space();
                //string selectorConfigInfo = currentClient != null ? DebugEditorUtilities.SelectorConfig(currentClient.configuration.selector) : "No Selected Selector";
                string selectorConfigInfo = currentClient != null?DebugEditorUtilities.SelectorConfig(currentClient.configuration.rootSelector) : "No Selected Selector";

                EditorGUILayout.HelpBox(selectorConfigInfo, MessageType.Info);
            }
        }
        void AIReflection()
        {
            //if (GUILayout.Button("Debug AI RootSelector Properties")){
            //    var utilityAI = currentClient.configuration.rootSelector;
            //    var obj = TaskNetworkUtilities.GetAllProperties(utilityAI);
            //    foreach (PropertyInfo info in obj){
            //        Debug.Log(info.GetValue(utilityAI));
            //    }
            //}
            if (currentClient == null)
            {
                return;
            }

            var utilityAI = currentClient.configuration.rootSelector;


            PropertyInfo[] properties = TaskNetworkUtilities.GetAllProperties(utilityAI);
            foreach (PropertyInfo property in properties)
            {
                string displayInfo = "";


                //  Name of the property.
                string propertyName = property.Name;
                //  Property type.
                Type propertyType = property.PropertyType;
                //  What class it was declared in.
                Type declaringType = property.DeclaringType;
                //IEnumerable<CustomAttributeData> customAttributes = property.CustomAttributes;
                //  If it is a property, field or method.
                MemberTypes memberType = property.MemberType;
                object      getValue   = property.GetValue(utilityAI, null);
                ICollection collection = getValue as ICollection;

                int?   count;
                string countString     = "";
                string collectionItems = "";
                string itemInfoString  = "";

                if (collection != null)
                {
                    count       = collection.Count;
                    countString = "(Count: " + count + ")";
                    if (getValue is IEnumerable)
                    {
                        collectionItems += "  Collection Items\n";
                        IList list  = getValue as IList;
                        int   index = 0;
                        foreach (object obj in list)
                        {
                            itemInfoString += "    " + obj.GetType() + "(" + index + ")\n";
                            PropertyInfo[] itemInfo = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                            foreach (PropertyInfo item in itemInfo)
                            {
                                itemInfoString += string.Format("      Property Name:     {0}\n" +
                                                                "      Property Type:     {1}\n" +
                                                                "      Property GetValue: {2}\n\n",
                                                                item.Name, item.PropertyType, item.GetValue(obj, null));
                            }
                            //FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
                            //foreach (FieldInfo item in fields)
                            //{
                            //    itemInfoString += string.Format("      Field Name:     {0}\n" +
                            //                                    "      Field Type:     {1}\n" +
                            //                                    "      Field GetValue: {2}\n\n",
                            //                                    item.Name, item.FieldType, item.GetValue(obj));
                            //}
                            index++;
                            collectionItems += itemInfoString + "\n";
                        }
                    }

                    //for (int i = 0; i < count; i ++){
                    //    object item = property.GetValue(utilityAI, new object[] { i });
                    //    collectionItems += "    " + item.GetType().Name + "\n";
                    //}
                }
                else
                {
                    count       = null;
                    countString = "<None>";
                }


                displayInfo = string.Format("Property Name:     {0}\n" +
                                            "Property Type:     {1}\n" +
                                            "Declaring Type:    {2}\n" +
                                            "Custom Attributes: {3}\n" +
                                            "Property GetValue: {4} ({7})| {5}\n" +
                                            "{6}\n",
                                            propertyName, propertyType, declaringType, "<None>", getValue, countString, collectionItems, getValue.GetType());

                GUILayout.Label(displayInfo);
            }
        }