using Platform101XP.Editor.Settings.Export;
using Platform101XP.Editor.Settings.Repositories;
using System.IO;
using UnityEditor;
using UnityEngine;

namespace Platform101XP.Editor.Settings
{
    public class SettingsInspectorEditorWindow : EditorWindow
    {
        // Other.
        private const string WINDOW_NAME = "P101XP Settings";
        private const string BASIC_TAB = "Base";
        private const string IOS_TAB = "iOS";
        private const string ANDROID_TAB = "Android";

        private readonly string[] tabs = {BASIC_TAB, IOS_TAB, ANDROID_TAB};
        private int selectedTab;

        private Vector2 baseTabScrollPos;
        private Vector2 iOSTabScrollPos;
        private Vector2 androidTabScrollPos;

        [MenuItem("Window/P101XP/Settings")]
        private static void Init()
        {
            var window = (SettingsInspectorEditorWindow) GetWindow(typeof(SettingsInspectorEditorWindow), true, WINDOW_NAME);
            window.Show();
        }

        private void OnGUI()
        {
            EditorGUIUtility.labelWidth = 160;
            EditorGUILayout.Space();
            if (GUILayout.Button("Apply Settings") &&
                EditorUtility.DisplayDialog("Settings Apply Confirmation",
                    "Applying will override AndroidManifest.xml and P101XP-Info.plist." +
                    "Are you sure that you want to apply setting? ",
                    "Apply",
                    "Cancel"))
            {
                SettingsManager.Instance.ExportAll();
            }

            EditorGUILayout.Space();
            selectedTab = GUILayout.Toolbar(selectedTab, tabs);

            switch (selectedTab)
            {
                // Basic tab.
                case 0:
                    OnSettingsForGUIBase();
                    break;
                // iOS tab.
                case 1:
                    OnSettingsGUIForIOS();
                    break;
                // Android tab.
                case 2:
                    OnSettingsGUIForAndroid();
                    break;
            }
        }

        // MARK: - Base

        private void OnSettingsForGUIBase()
        {
            EditorGUILayout.BeginVertical();
            baseTabScrollPos = EditorGUILayout.BeginScrollView(baseTabScrollPos);

            // Base
            EditorGUILayout.LabelField("Base", EditorStyles.boldLabel);
            SettingsManager.Instance.Base.ClientId =
                EditorGUILayout.TextField("Client Id", SettingsManager.Instance.Base.ClientId);
            SettingsManager.Instance.Base.AppName =
                EditorGUILayout.TextField("App Name", SettingsManager.Instance.Base.AppName);
            SettingsManager.Instance.Base.AppConfigName =
                EditorGUILayout.TextField("App Config Name", SettingsManager.Instance.Base.AppConfigName);
            SettingsManager.Instance.Base.DevMode =
                EditorGUILayout.Toggle("Developer Mode", SettingsManager.Instance.Base.DevMode);
            SettingsManager.Instance.Base.WebSupportUrl =
                EditorGUILayout.TextField("Web Support Url", SettingsManager.Instance.Base.WebSupportUrl);

            // Web Store
            EditorGUILayout.LabelField("Web Store", EditorStyles.boldLabel);
            SettingsManager.Instance.Base.WebStoreProjectName =
                EditorGUILayout.TextField("Web Store Project Name", SettingsManager.Instance.Base.WebStoreProjectName);

            // Facebook
            EditorGUILayout.LabelField("Facebook", EditorStyles.boldLabel);
            SettingsManager.Instance.Base.FacebookAppId =
                EditorGUILayout.TextField("Facebook App Id", SettingsManager.Instance.Base.FacebookAppId);
            SettingsManager.Instance.Base.FacebookInviteString =
                EditorGUILayout.TextField("Facebook Invite String", SettingsManager.Instance.Base.FacebookInviteString);
            SettingsManager.Instance.Base.FacebookClientToken =
                EditorGUILayout.TextField("Facebook ClientToken", SettingsManager.Instance.Base.FacebookClientToken);

            // Auth
            EditorGUILayout.LabelField("Auth", EditorStyles.boldLabel);
            SettingsManager.Instance.Base.AutoLoginEnabled =
                EditorGUILayout.Toggle("Auto Login Enabled", SettingsManager.Instance.Base.AutoLoginEnabled);
            SettingsManager.Instance.Base.GuestEnabled =
                EditorGUILayout.Toggle("Guest Enabled", SettingsManager.Instance.Base.GuestEnabled);
            SettingsManager.Instance.Base.GuestTimeoutEnabled =
                EditorGUILayout.Toggle("Guest Timeout Enabled", SettingsManager.Instance.Base.GuestTimeoutEnabled);
            SettingsManager.Instance.Base.GuestOnlyAuth =
                EditorGUILayout.Toggle("Guest Only Auth", SettingsManager.Instance.Base.GuestOnlyAuth);

            // Zendesk
            EditorGUILayout.LabelField("Zendesk", EditorStyles.boldLabel);
            SettingsManager.Instance.Base.ZendeskEnabled =
                EditorGUILayout.Toggle("Zendesk Enabled", SettingsManager.Instance.Base.ZendeskEnabled);
            SettingsManager.Instance.Base.ZendeskGameId =
                EditorGUILayout.TextField("Zendesk Game Id", SettingsManager.Instance.Base.ZendeskGameId);
            SettingsManager.Instance.Base.ZendeskCategoryId =
                EditorGUILayout.TextField("Zendesk Category Id", SettingsManager.Instance.Base.ZendeskCategoryId);
            SettingsManager.Instance.Base.ZendeskAppId =
                EditorGUILayout.TextField("Zendesk App Id", SettingsManager.Instance.Base.ZendeskAppId);
            SettingsManager.Instance.Base.ZendeskAuthClientId =
                EditorGUILayout.TextField("Zendesk Auth Client Id", SettingsManager.Instance.Base.ZendeskAuthClientId);

            // Billing
            EditorGUILayout.LabelField("Billing", EditorStyles.boldLabel);
            SettingsManager.Instance.Base.BillingTest =
                EditorGUILayout.Toggle("Billing Test", SettingsManager.Instance.Base.BillingTest);

            // Analytics
            EditorGUILayout.LabelField("Analytics", EditorStyles.boldLabel);
            SettingsManager.Instance.Base.AppsflyerTrackEnabled =
                EditorGUILayout.Toggle("Appsflyer Track Enabled", SettingsManager.Instance.Base.AppsflyerTrackEnabled);
            SettingsManager.Instance.Base.AppsflyerDebugLogEnabled =
                EditorGUILayout.Toggle("Appsflyer Debug Log Enabled", SettingsManager.Instance.Base.AppsflyerDebugLogEnabled);
            SettingsManager.Instance.Base.AppsflyerDevKey =
                EditorGUILayout.TextField("Appsflyer Developer Key", SettingsManager.Instance.Base.AppsflyerDevKey);
            SettingsManager.Instance.Base.AppReviewEnabled =
                EditorGUILayout.Toggle("App Review Enabled", SettingsManager.Instance.Base.AppReviewEnabled);
            SettingsManager.Instance.Base.AppReviewDaysSelay =
                EditorGUILayout.IntField("App Review Days Selay", SettingsManager.Instance.Base.AppReviewDaysSelay);
            SettingsManager.Instance.Base.AppReviewSecondsDelay =
                EditorGUILayout.IntField("App Review Seconds Delay", SettingsManager.Instance.Base.AppReviewSecondsDelay);

            // App Store
            EditorGUILayout.LabelField("App Store", EditorStyles.boldLabel);
            SettingsManager.Instance.Base.AppStoreLink =
                EditorGUILayout.TextField("AppStore Link", SettingsManager.Instance.Base.AppStoreLink);
            SettingsManager.Instance.Base.AppStoreId =
                EditorGUILayout.TextField("AppStore Id", SettingsManager.Instance.Base.AppStoreId);

            // EULA
            EditorGUILayout.LabelField("EULA", EditorStyles.boldLabel);
            SettingsManager.Instance.Base.EulaShowEnabled =
                EditorGUILayout.Toggle("EULA Show Enabled", SettingsManager.Instance.Base.EulaShowEnabled);
            SettingsManager.Instance.Base.EulaAutoAccept =
                EditorGUILayout.Toggle("EULA Auto Accept", SettingsManager.Instance.Base.EulaAutoAccept);
            SettingsManager.Instance.Base.EulaDefaultUrl =
                EditorGUILayout.TextField("EULA Default Url", SettingsManager.Instance.Base.EulaDefaultUrl);

            // Web Dialogs
            EditorGUILayout.LabelField("Web Dialogs", EditorStyles.boldLabel);
            SettingsManager.Instance.Base.DeviceTokenEnabled =
                EditorGUILayout.Toggle("Device Token Enabled", SettingsManager.Instance.Base.DeviceTokenEnabled);
            SettingsManager.Instance.Base.WebUiEnabled =
                EditorGUILayout.Toggle("Web UI Enabled", SettingsManager.Instance.Base.WebUiEnabled);
            SettingsManager.Instance.Base.WebUiVersion =
                EditorGUILayout.TextField("Web UI Version", SettingsManager.Instance.Base.WebUiVersion);

            EditorGUILayout.EndScrollView();
            EditorGUILayout.EndVertical();
        }

        // MARK: - iOS

        private void OnSettingsGUIForIOS()
        {
            EditorGUILayout.BeginVertical();
            iOSTabScrollPos = EditorGUILayout.BeginScrollView(iOSTabScrollPos);

            // Base
            EditorGUILayout.LabelField("Base", EditorStyles.boldLabel);


            SettingsManager.Instance.IOS.SnExtraPermission =
                EditorGUILayout.Toggle("SN Extra Permission", SettingsManager.Instance.IOS.SnExtraPermission);

            // Skin
            EditorGUILayout.LabelField("Skin", EditorStyles.boldLabel);
            SettingsManager.Instance.IOS.SkinEnabled =
                EditorGUILayout.Toggle("Skin Enabled", SettingsManager.Instance.IOS.SkinEnabled);
            SettingsManager.Instance.IOS.SkinName =
                EditorGUILayout.TextField("Skin Name", SettingsManager.Instance.IOS.SkinName);

            // Facebook
            EditorGUILayout.LabelField("Facebook", EditorStyles.boldLabel);
            SettingsManager.Instance.IOS.FacebookEnabled =
                EditorGUILayout.Toggle("Facebook Enabled", SettingsManager.Instance.IOS.FacebookEnabled);
            SettingsManager.Instance.IOS.FacebookAuthEnabled =
                EditorGUILayout.Toggle("Facebook Auth Enabled", SettingsManager.Instance.IOS.FacebookAuthEnabled);

            // Odnoklassniki
            EditorGUILayout.LabelField("Odnoklassniki", EditorStyles.boldLabel);
            SettingsManager.Instance.IOS.OkEnabled =
                EditorGUILayout.Toggle("Ok Enabled", SettingsManager.Instance.IOS.OkEnabled);
            SettingsManager.Instance.IOS.OkAppId =
                EditorGUILayout.TextField("Ok App Id", SettingsManager.Instance.IOS.OkAppId);
            SettingsManager.Instance.IOS.OkAppKey =
                EditorGUILayout.TextField("Ok App Key", SettingsManager.Instance.IOS.OkAppKey);

            // Vk
            EditorGUILayout.LabelField("Vk", EditorStyles.boldLabel);
            SettingsManager.Instance.IOS.VkEnabled =
                EditorGUILayout.Toggle("Vk Enabled", SettingsManager.Instance.IOS.VkEnabled);
            SettingsManager.Instance.IOS.VkAppId =
                EditorGUILayout.TextField("Vk App Id", SettingsManager.Instance.IOS.VkAppId);

            // Billing
            EditorGUILayout.LabelField("Billing", EditorStyles.boldLabel);
            SettingsManager.Instance.IOS.BillingTimeout =
                EditorGUILayout.IntField("Billing Timeout", SettingsManager.Instance.IOS.BillingTimeout);
            SettingsManager.Instance.IOS.BillingSku =
                TextFieldsArray("Billing SKU Count", "SKU", SettingsManager.Instance.IOS.BillingSku);

            // Analytics
            EditorGUILayout.LabelField("Analytics", EditorStyles.boldLabel);
            SettingsManager.Instance.IOS.AnalyticsProjectId =
                EditorGUILayout.TextField("Analytics Project Id", SettingsManager.Instance.IOS.AnalyticsProjectId);

            // Adjust
            EditorGUILayout.LabelField("Adjust", EditorStyles.boldLabel);
            SettingsManager.Instance.IOS.EnableAdjust =
                EditorGUILayout.Toggle("Enable Adjust", SettingsManager.Instance.IOS.EnableAdjust);
            SettingsManager.Instance.IOS.EnableAdjustTrack =
                EditorGUILayout.Toggle("Enable Adjust Track", SettingsManager.Instance.IOS.EnableAdjustTrack);
            SettingsManager.Instance.IOS.AdjustAppToken =
                EditorGUILayout.TextField("Adjust App Token", SettingsManager.Instance.IOS.AdjustAppToken);
            SettingsManager.Instance.IOS.AdjustEventMap =
                EditorGUILayout.TextField("Adjust Event Map (JSON)", SettingsManager.Instance.IOS.AdjustEventMap);

            // App Review
            EditorGUILayout.LabelField("App Review", EditorStyles.boldLabel);
            SettingsManager.Instance.IOS.AppReviewDaysAsSeconsForDebug =
                EditorGUILayout.Toggle("Days As Seconds For Debug", SettingsManager.Instance.IOS.AppReviewDaysAsSeconsForDebug);

            // Authorization Window
            EditorGUILayout.LabelField("Authorization Window", EditorStyles.boldLabel);
            SettingsManager.Instance.IOS.ScreenLockHorizontal =
                EditorGUILayout.Toggle("Screen Lock Horizontal", SettingsManager.Instance.IOS.ScreenLockHorizontal);
            SettingsManager.Instance.IOS.ScreenLockVertical =
                EditorGUILayout.Toggle("Screen Lock Vertical", SettingsManager.Instance.IOS.ScreenLockVertical);

            // Sentry
            EditorGUILayout.LabelField("Sentry", EditorStyles.boldLabel);
            SettingsManager.Instance.IOS.SentryDSN =
                EditorGUILayout.TextField("Sentry DSN", SettingsManager.Instance.IOS.SentryDSN);
            SettingsManager.Instance.IOS.SentryDebugMode =
                EditorGUILayout.Toggle("Sentry Debug Mode", SettingsManager.Instance.IOS.SentryDebugMode);

            EditorGUILayout.EndScrollView();
            EditorGUILayout.EndVertical();
        }

        // MARK: - Android

        private void OnSettingsGUIForAndroid()
        {
            EditorGUILayout.BeginVertical();
            androidTabScrollPos = EditorGUILayout.BeginScrollView(androidTabScrollPos);

            // Base.
            EditorGUILayout.LabelField("Base", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.AppSkinName =
                EditorGUILayout.TextField("App Skin Name", SettingsManager.Instance.Android.AppSkinName);

            // Facebook.
            EditorGUILayout.LabelField("Facebook", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.FacebookEnabled =
                EditorGUILayout.Toggle("Facebook Enabled", SettingsManager.Instance.Android.FacebookEnabled);
            SettingsManager.Instance.Android.FacebookAuthEnabled =
                EditorGUILayout.Toggle("Facebook Auth Enabled", SettingsManager.Instance.Android.FacebookAuthEnabled);
            SettingsManager.Instance.Android.FacebookGameLink =
                EditorGUILayout.TextField("Facebook Game Link", SettingsManager.Instance.Android.FacebookGameLink);
            SettingsManager.Instance.Android.FacebookGamePreview =
                EditorGUILayout.TextField("Facebook Game Preview", SettingsManager.Instance.Android.FacebookGamePreview);

            // Google.
            EditorGUILayout.LabelField("Google", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.GpEnabled =
                EditorGUILayout.Toggle("Google Play Enabled", SettingsManager.Instance.Android.GpEnabled);
            SettingsManager.Instance.Android.GoogleClientId =
                EditorGUILayout.TextField("Google Client Id", SettingsManager.Instance.Android.GoogleClientId);
            SettingsManager.Instance.Android.GooglePlayServicesAppId =
                EditorGUILayout.TextField("Google Play Services App Id", SettingsManager.Instance.Android.GooglePlayServicesAppId);
            SettingsManager.Instance.Android.GoogleAuthFirstSession =
                EditorGUILayout.Toggle("Google Auth First Session", SettingsManager.Instance.Android.GoogleAuthFirstSession);
            SettingsManager.Instance.Android.GoogleMaxAutoAuthorize =
                EditorGUILayout.IntField("Google Max Auto Authorize", SettingsManager.Instance.Android.GoogleMaxAutoAuthorize);

            EditorGUILayout.LabelField("Yandex", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.YandexClientId =
                EditorGUILayout.TextField("Yandex Client Id", SettingsManager.Instance.Android.YandexClientId);

            // VK.
            EditorGUILayout.LabelField("VK", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.VkEnabled =
                EditorGUILayout.Toggle("VK Enabled", SettingsManager.Instance.Android.VkEnabled);
            SettingsManager.Instance.Android.VkClientId =
                EditorGUILayout.TextField("VK ID Client Id", SettingsManager.Instance.Android.VkClientId);
            SettingsManager.Instance.Android.VkClientSecret =
                EditorGUILayout.PasswordField("VK ID Client Secret", SettingsManager.Instance.Android.VkClientSecret);

            // Odnoklassniki
            EditorGUILayout.LabelField("Odnoklassniki", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.OkEnabled =
                EditorGUILayout.Toggle("OK Enabled", SettingsManager.Instance.Android.OkEnabled);
            SettingsManager.Instance.Android.OkAppId =
                EditorGUILayout.TextField("OK App Id", SettingsManager.Instance.Android.OkAppId);
            SettingsManager.Instance.Android.OkAppKey =
                EditorGUILayout.TextField("OK App Key", SettingsManager.Instance.Android.OkAppKey);

            // Billing
            EditorGUILayout.LabelField("Billing", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.BillingEnabled =
                EditorGUILayout.Toggle("Billing Enabled", SettingsManager.Instance.Android.BillingEnabled);
            SettingsManager.Instance.Android.BillingSku =
                TextFieldsArray("Billing SKU Count", "SKU", SettingsManager.Instance.Android.BillingSku);
            SettingsManager.Instance.Android.BillingPublicKey =
                EditorGUILayout.TextField("Billing Public Key", SettingsManager.Instance.Android.BillingPublicKey);
            SettingsManager.Instance.Android.BillingRobokassaEnabled =
                EditorGUILayout.Toggle("Billing Robokassa Enabled", SettingsManager.Instance.Android.BillingRobokassaEnabled);
            SettingsManager.Instance.Android.BillingCloudPaymentsEnabled =
                EditorGUILayout.Toggle("Billing CloudPayments Enabled", SettingsManager.Instance.Android.BillingCloudPaymentsEnabled);

            // Analytics
            EditorGUILayout.LabelField("Analytics", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.AnalyticsProjectId =
                EditorGUILayout.TextField("Analytics Project Id", SettingsManager.Instance.Android.AnalyticsProjectId);
            SettingsManager.Instance.Android.PackageName =
                EditorGUILayout.TextField("Package Name", SettingsManager.Instance.Android.PackageName);
            SettingsManager.Instance.Android.IMEISendingEnabled =
                EditorGUILayout.Toggle("IMEI Sending Enabled", SettingsManager.Instance.Android.IMEISendingEnabled);

            // Sentry
            EditorGUILayout.LabelField("Sentry", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.SentryDSN =
                EditorGUILayout.TextField("Sentry DSN", SettingsManager.Instance.Android.SentryDSN);
            SettingsManager.Instance.Android.SentryEnvironment =
                EditorGUILayout.TextField("Sentry Environment", SettingsManager.Instance.Android.SentryEnvironment);

            // Adjust
            EditorGUILayout.LabelField("Adjust", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.EnableAdjust =
                EditorGUILayout.Toggle("Enable Adjust", SettingsManager.Instance.Android.EnableAdjust);
            SettingsManager.Instance.Android.AdjustAppToken =
                EditorGUILayout.TextField("Adjust App Token", SettingsManager.Instance.Android.AdjustAppToken);
            SettingsManager.Instance.Android.AdjustEventMap =
                EditorGUILayout.TextField("Adjust Event Map (JSON)", SettingsManager.Instance.Android.AdjustEventMap);
            SettingsManager.Instance.Android.AdjustSandBox =
                EditorGUILayout.Toggle("Adjust SandBox", SettingsManager.Instance.Android.AdjustSandBox);
            SettingsManager.Instance.Android.AdjustLogLevel =
                (AndroidAdjustLogLevel)EditorGUILayout.EnumPopup("Adjust Log Level", SettingsManager.Instance.Android.AdjustLogLevel);

            // Notification
            EditorGUILayout.LabelField("Notification", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.NotificationTitle =
                EditorGUILayout.TextField("Notification Title", SettingsManager.Instance.Android.NotificationTitle);

            // Firebase DynamicLink Invite
            EditorGUILayout.LabelField("Firebase DynamicLink Invite", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.AppLink =
                EditorGUILayout.TextField("App Link", SettingsManager.Instance.Android.AppLink);
            SettingsManager.Instance.Android.DynamicLinkDomain =
                EditorGUILayout.TextField("Dynamic Link Domain", SettingsManager.Instance.Android.DynamicLinkDomain);

            // App Store
            EditorGUILayout.LabelField("App Store", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.AppInviteMessage =
                EditorGUILayout.TextField("App Invite Message", SettingsManager.Instance.Android.AppInviteMessage);

            // Wed Dialogs
            EditorGUILayout.LabelField("Wed Dialogs", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.WebScreenRotationDisabled =
                EditorGUILayout.Toggle("Web Screen Rotation Disabled", SettingsManager.Instance.Android.WebScreenRotationDisabled);

            // Authorization Window
            EditorGUILayout.LabelField("Authorization Window", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.ScreenRotationDisabled =
                EditorGUILayout.Toggle("Screen Rotation Disabled", SettingsManager.Instance.Android.ScreenRotationDisabled);
            SettingsManager.Instance.Android.ScreenLockHorizontal =
                EditorGUILayout.Toggle("Screen Lock Horizontal", SettingsManager.Instance.Android.ScreenLockHorizontal);
            SettingsManager.Instance.Android.ScreenLockVertical =
                EditorGUILayout.Toggle("Screen Lock Vertical", SettingsManager.Instance.Android.ScreenLockVertical);


#if UNITY_2019
            // Unity 2019
            EditorGUILayout.LabelField("Unity 2019", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.Unity2019EnableR8 = 
                EditorGUILayout.Toggle("EnableR8 (override)", SettingsManager.Instance.Android.Unity2019EnableR8);
#endif

            // Advertising
            EditorGUILayout.LabelField("Advertising", EditorStyles.boldLabel);
            SettingsManager.Instance.Android.AdAdmobEnabled =
                EditorGUILayout.Toggle("AdMob Enabled", SettingsManager.Instance.Android.AdAdmobEnabled);
            SettingsManager.Instance.Android.AdIronSourceEnabled =
                EditorGUILayout.Toggle("Iron Source Enabled", SettingsManager.Instance.Android.AdIronSourceEnabled);
            SettingsManager.Instance.Android.AdGmsApplicationId =
                EditorGUILayout.TextField("GMS Ad Application ID", SettingsManager.Instance.Android.AdGmsApplicationId);
            SettingsManager.Instance.Android.AdGmsAppopenAdUnitId =
                EditorGUILayout.TextField("App Open Ad Unit ID", SettingsManager.Instance.Android.AdGmsAppopenAdUnitId);
            SettingsManager.Instance.Android.AdAppopenAdTime =
                EditorGUILayout.IntField("App Open Ad Time", SettingsManager.Instance.Android.AdAppopenAdTime);
            SettingsManager.Instance.Android.AdAppopenAdOrientation =
                (AppOpenAdOrientation)EditorGUILayout.EnumPopup("App Open Ad Orientation", SettingsManager.Instance.Android.AdAppopenAdOrientation);
            SettingsManager.Instance.Android.AdBannerAdUnitId =
                EditorGUILayout.TextField("Banner Ad Unit ID", SettingsManager.Instance.Android.AdBannerAdUnitId);
            SettingsManager.Instance.Android.AdBannerAdPositionVertical =
                (BannerAdPositionVertical)EditorGUILayout.EnumPopup("Banner Ad Position Vertical", SettingsManager.Instance.Android.AdBannerAdPositionVertical);
            SettingsManager.Instance.Android.AdBannerAdPositionHorizontal =
                (BannerAdPositionHorizontal)EditorGUILayout.EnumPopup("Banner Ad Position Horizontal", SettingsManager.Instance.Android.AdBannerAdPositionHorizontal);
            SettingsManager.Instance.Android.AdBannerAdSize =
                (BannerAdSize)EditorGUILayout.EnumPopup("Banner Ad Size", SettingsManager.Instance.Android.AdBannerAdSize);
            SettingsManager.Instance.Android.AdInterstitialAdUnitId =
                EditorGUILayout.TextField("Interstitial Ad Unit ID", SettingsManager.Instance.Android.AdInterstitialAdUnitId);
            SettingsManager.Instance.Android.AdRewardAdUnitId =
                EditorGUILayout.TextField("Reward Ad Unit ID", SettingsManager.Instance.Android.AdRewardAdUnitId);
            SettingsManager.Instance.Android.AdGmsRewardinterstitialAdUnitId =
                EditorGUILayout.TextField("Reward Interstitial Ad Unit ID", SettingsManager.Instance.Android.AdGmsRewardinterstitialAdUnitId);
            SettingsManager.Instance.Android.AdTagForChildDirectedTreatment =
                (TagForChildDirectedTreatment)EditorGUILayout.EnumPopup("Tag For Child Directed Treatment", SettingsManager.Instance.Android.AdTagForChildDirectedTreatment);
            SettingsManager.Instance.Android.AdTagForUnderAgeOfConsent =
                (TagForUnderAgeOfConsent)EditorGUILayout.EnumPopup("Tag For Under Age Of Consent", SettingsManager.Instance.Android.AdTagForUnderAgeOfConsent);
            SettingsManager.Instance.Android.AdMaxAdContentRating =
                (MaxAdContentRating)EditorGUILayout.EnumPopup("Max Ad Content Rating", SettingsManager.Instance.Android.AdMaxAdContentRating);
            SettingsManager.Instance.Android.AdAdmobDebugGeography =
                (AdmobDebugGeography)EditorGUILayout.EnumPopup("AdMob Debug Geography", SettingsManager.Instance.Android.AdAdmobDebugGeography);
            SettingsManager.Instance.Android.AdIronSourceAppKey =
                EditorGUILayout.TextField("IronSource App Key", SettingsManager.Instance.Android.AdIronSourceAppKey);
            SettingsManager.Instance.Android.AdIsDoNotSell =
                EditorGUILayout.Toggle("Is Do Not Sell", SettingsManager.Instance.Android.AdIsDoNotSell);
            SettingsManager.Instance.Android.AdIsChildDirected =
                EditorGUILayout.Toggle("Is Child Directed", SettingsManager.Instance.Android.AdIsChildDirected);
            SettingsManager.Instance.Android.AdTestDeviceIdsEnabled =
                EditorGUILayout.Toggle("Test Device Ids Enabled", SettingsManager.Instance.Android.AdTestDeviceIdsEnabled);
            SettingsManager.Instance.Android.AdTestDeviceIds =
                EditorGUILayout.TextField("Test Device Ids", SettingsManager.Instance.Android.AdTestDeviceIds);

            EditorGUILayout.EndScrollView();
            EditorGUILayout.EndVertical();
        }

        private string[] TextFieldsArray(string arrayCountFieldLabel, string arrayElementFieldLabel, string[] array)
        {
            if (array == null)
            {
                array = new string[0];
            }

            var newArrayCount = EditorGUILayout.IntField(arrayCountFieldLabel, array.Length);
            var newArray = new string[newArrayCount];
            for (var i = 0; i < newArray.Length; i++)
            {
                newArray[i] = EditorGUILayout.TextField($"{arrayElementFieldLabel} {i + 1}", i < array.Length ? array[i] : string.Empty);
            }

            return newArray;
        }
    }
}
