﻿#if UNITY_EDITOR
using UnityEditor;
using UnityEngine;

namespace JLGames.RocketDriver.Actions.Loaderx
{
    [CustomEditor(typeof(LoaderSettings), true)]
    public class LoaderSettingsEditor : Editor
    {
        SerializedProperty m_RunMode;
        SerializedProperty m_AssetMode;
        SerializedProperty m_EditorSettings;
        SerializedProperty m_DebugSettings;
        SerializedProperty m_ReleaseSettings;

        private void OnEnable()
        {
            m_RunMode = serializedObject.FindProperty("m_RunMode");
            m_AssetMode = serializedObject.FindProperty("m_AssetMode");
            m_EditorSettings = serializedObject.FindProperty("m_EditorSettings");
            m_DebugSettings = serializedObject.FindProperty("m_DebugSettings");
            m_ReleaseSettings = serializedObject.FindProperty("m_ReleaseSettings");
        }

        public override void OnInspectorGUI()
        {
            DrawModeView();
            EditorGUILayout.Space();
            DrawSettings();
            serializedObject.ApplyModifiedProperties();
        }

        private void DrawModeView()
        {
            EditorGUILayout.LabelField("运行模式设置:", EditorStyles.boldLabel);
            EditorGUILayout.PropertyField(m_RunMode);
            EditorGUILayout.LabelField("下载模式设置:", EditorStyles.boldLabel);
            var assetMode = m_AssetMode.GetArrayElementAtIndex(m_RunMode.enumValueIndex);
            EditorGUILayout.PropertyField(assetMode, new GUIContent("AssetMode"));
        }

        private void DrawSettings()
        {
            EditorGUILayout.LabelField("当前设置:", EditorStyles.boldLabel);
            GUI.enabled = false;
            var runMode = (LoaderSettings.LoaderRunMode) m_RunMode.enumValueIndex;
            var assetMode =
                (LoaderSettings.LoaderAssetMode) m_AssetMode.GetArrayElementAtIndex((int) runMode).enumValueIndex;
            var settings = GetSettings(runMode, assetMode);
            EditorGUILayout.PropertyField(settings, new GUIContent("配置引用"));
            GUI.enabled = true;
        }

        private SerializedProperty GetSettings(LoaderSettings.LoaderRunMode runMode,
            LoaderSettings.LoaderAssetMode assetMode)
        {
            if (assetMode == LoaderSettings.LoaderAssetMode.Editor)
            {
                return m_EditorSettings;
            }

            var assetIndex = (int) assetMode - 1;

            var rs = runMode == LoaderSettings.LoaderRunMode.Debug
                ? m_DebugSettings.GetArrayElementAtIndex(assetIndex)
                : m_ReleaseSettings.GetArrayElementAtIndex(assetIndex);
            return rs;
        }
    }
}
#endif