using UnityEditor;
using UnityEngine;

namespace GoogleMobileAds.Editor
{
    [InitializeOnLoad]
    [CustomEditor(typeof(GoogleMobileAdsSettings))]
    public class GoogleMobileAdsSettingsEditor : UnityEditor.Editor
    {

        SerializedProperty _appIdAndroid;
        SerializedProperty _appIdiOS;
        SerializedProperty _enableKotlinXCoroutinesPackagingOption;
        SerializedProperty _optimizeInitialization;
        SerializedProperty _optimizeAdLoading;
        SerializedProperty _userTrackingUsageDescription;
        SerializedProperty _validateGradleDependencies;


        [MenuItem("Assets/Google Mobile Ads/Settings...")]
        public static void OpenInspector()
        {
            Selection.activeObject = GoogleMobileAdsSettings.LoadInstance();
        }

        public void OnEnable()
        {
            _appIdAndroid = serializedObject.FindProperty("adMobAndroidAppId");
            _appIdiOS = serializedObject.FindProperty("adMobIOSAppId");
            _enableKotlinXCoroutinesPackagingOption =
                serializedObject.FindProperty("enableKotlinXCoroutinesPackagingOption");
            _optimizeInitialization = serializedObject.FindProperty("optimizeInitialization");
            _optimizeAdLoading = serializedObject.FindProperty("optimizeAdLoading");
            _userTrackingUsageDescription =
                    serializedObject.FindProperty("userTrackingUsageDescription");
            _validateGradleDependencies =
                    serializedObject.FindProperty("validateGradleDependencies");
        }

        public override void OnInspectorGUI()
        {
            // Make sure the Settings object has all recent changes.
            serializedObject.Update();

            var settings = (GoogleMobileAdsSettings)target;

            if(settings == null)
            {
              UnityEngine.Debug.LogError("GoogleMobileAdsSettings is null.");
              return;
            }

            EditorGUIUtility.labelWidth = 60.0f;
            EditorGUILayout.LabelField("Google Mobile Ads App ID", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;

            EditorGUILayout.PropertyField(_appIdAndroid, new GUIContent("Android"));

            EditorGUILayout.PropertyField(_appIdiOS, new GUIContent("iOS"));

            EditorGUILayout.HelpBox(
                    "Google Mobile Ads App ID will look similar to this sample ID: ca-app-pub-3940256099942544~3347511713",
                    MessageType.Info);

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

            EditorGUIUtility.labelWidth = 325.0f;
            EditorGUILayout.LabelField("Android settings", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;

            EditorGUI.BeginChangeCheck();

            EditorGUILayout.PropertyField(_enableKotlinXCoroutinesPackagingOption,
                              new GUIContent("Enable kotlinx.coroutines packaging option."));

            if (settings.EnableKotlinXCoroutinesPackagingOption)
            {
                EditorGUILayout.HelpBox(
                        "Adds instruction to fix a build.gradle build error with message"+
                        " '2 files found with path 'META-INF/kotlinx_coroutines_core.version'."+
                        " For more details see https://developers.google.com/admob/unity/gradle",
                        MessageType.Info);
            }

            EditorGUILayout.PropertyField(_validateGradleDependencies,
                              new GUIContent("Remove property tag from GMA Android SDK"));

            if (settings.ValidateGradleDependencies)
            {
                EditorGUILayout.HelpBox(
                    "This option ensures the GMA Android SDK is compatible with the version of " +
                    "Android Gradle Plugin being used. Enabling this option is required for Unity" +
                    " Projects that use Android Gradle Plugin under version 4.2.2.",
                    MessageType.Info);
            }

            EditorGUILayout.PropertyField(_optimizeInitialization,
                                          new GUIContent("Optimize initialization"));
            if (settings.OptimizeInitialization) {
                EditorGUILayout.HelpBox(
                        "Initialization will be offloaded to a background thread.",
                        MessageType.Info);
            }

            EditorGUILayout.PropertyField(_optimizeAdLoading,
                                          new GUIContent("Optimize ad loading"));

            if (settings.OptimizeAdLoading) {
                EditorGUILayout.HelpBox(
                        "Ad loading tasks will be offloaded to a background thread.",
                        MessageType.Info);
            }

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

            EditorGUIUtility.labelWidth = 205.0f;
            EditorGUILayout.LabelField("UMP-specific settings", EditorStyles.boldLabel);
            EditorGUI.indentLevel++;

            EditorGUILayout.PropertyField(_userTrackingUsageDescription,
                                          new GUIContent("User Tracking Usage Description"));

            EditorGUILayout.HelpBox(
                    "A message that informs the user why an iOS app is requesting permission to " +
                    "use data for tracking the user or the device.", MessageType.Info);

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

            serializedObject.ApplyModifiedProperties();
        }
    }
}