private void UpdateCoreProccess(string internalDependencyName, string internalDependencyUnityContent,
                                        string latestDependencyUnityContent, PlatformSdk platformSdk)
        {
            if (GUILayout.Button(
                    new GUIContent {
                text = AppodealDependencyUtils.ActionUpdate
            },
                    btnFieldWidth))
            {
                var option = EditorUtility.DisplayDialog("Update dependencies",
                                                         "If you will update core, all adapters this platform will be updated automatically. " +
                                                         "Do you want to update core?",
                                                         "Ok",
                                                         "Cancel");
                if (!option)
                {
                    return;
                }
                switch (platformSdk)
                {
                case PlatformSdk.iOS:
                    if (internalDependencies.Count <= 0 || latestDependencies.Count <= 0)
                    {
                        return;
                    }
                    foreach (var key in internalDependencies.Keys.Where(key =>
                                                                        latestDependencies.ContainsKey(key)))
                    {
                        if (internalDependencies.TryGetValue(key, out var internalDep) &&
                            latestDependencies.TryGetValue(key, out var latestDep))
                        {
                            if (internalDep.ios_info != null)
                            {
                                UpdateDependency(internalDep.name,
                                                 internalDep.ios_info.unity_content,
                                                 latestDep.ios_info.unity_content);
                            }
                        }
                    }

                    break;

                case PlatformSdk.Android:
                    if (internalDependencies.Count <= 0 || latestDependencies.Count <= 0)
                    {
                        return;
                    }
                    foreach (var key in internalDependencies.Keys.Where(key =>
                                                                        latestDependencies.ContainsKey(key)))
                    {
                        if (internalDependencies.TryGetValue(key, out var internalDep) &&
                            latestDependencies.TryGetValue(key, out var latestDep))
                        {
                            if (internalDep.android_info != null)
                            {
                                UpdateDependency(internalDep.name,
                                                 internalDep.android_info.unity_content,
                                                 latestDep.android_info.unity_content);
                            }
                        }
                    }

                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(platformSdk), platformSdk, null);
                }

                UpdateDependency(internalDependencyName,
                                 internalDependencyUnityContent,
                                 latestDependencyUnityContent);

                UpdateWindow();
            }
        }
        private void SetAdapterInformationForImport(NetworkDependency latestDependency, PlatformSdk platformSdk)
        {
            switch (platformSdk)
            {
            case PlatformSdk.Android:
                if (latestDependency.android_info != null)
                {
                    SetAdapterImportInfo(latestDependency.name, AppodealDependencyUtils.EmptyCurrentVersion,
                                         latestDependency.android_info.version, latestDependency.android_info.unity_content);
                }

                break;

            case PlatformSdk.iOS:
                if (latestDependency.ios_info != null)
                {
                    SetAdapterImportInfo(latestDependency.name, AppodealDependencyUtils.EmptyCurrentVersion,
                                         latestDependency.ios_info.version, latestDependency.ios_info.unity_content);
                }

                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(platformSdk), platformSdk, null);
            }
        }
        private void GuiCoreRow(NetworkDependency internalDependency, NetworkDependency latestDependency,
                                PlatformSdk platform)
        {
            if (internalDependency == null || latestDependency == null)
            {
                return;
            }
            using (new EditorGUILayout.HorizontalScope(GUILayout.Height(20)))
            {
                if (!string.IsNullOrEmpty(internalDependency.name))
                {
                    GUILayout.Space(2);
                    GUILayout.Button(internalDependency.name, packageInfoStyle, GUILayout.Width(150));
                    if (platform == PlatformSdk.iOS)
                    {
                        if (internalDependency.ios_info != null &&
                            !string.IsNullOrEmpty(internalDependency.ios_info.version))
                        {
                            GUILayout.Space(56);
                            GUILayout.Button(
                                AppodealDependencyUtils.ReplaceBetaVersion(internalDependency.ios_info.version),
                                packageInfoStyle, GUILayout.Width(110));
                            if (latestDependency.ios_info != null &&
                                !string.IsNullOrEmpty(latestDependency.ios_info.version))
                            {
                                GUILayout.Space(85);
                                GUILayout.Button(
                                    AppodealDependencyUtils.ReplaceBetaVersion(latestDependency.ios_info.version),
                                    packageInfoStyle);
                                GUILayout.Space(15);

                                if (AppodealDependencyUtils.CompareVersion(internalDependency.ios_info.version,
                                                                           latestDependency.ios_info.version) == 0)
                                {
                                    GUI.enabled = false;
                                    GUILayout.Button(
                                        new GUIContent {
                                        text = AppodealDependencyUtils.ActionUpdate
                                    },
                                        btnFieldWidth);
                                    GUI.enabled = true;
                                }
                                else if (AppodealDependencyUtils.CompareVersion(internalDependency.ios_info.version,
                                                                                latestDependency.ios_info.version) > 0)
                                {
                                    GUI.enabled = false;
                                    GUILayout.Button(
                                        new GUIContent {
                                        text = AppodealDependencyUtils.ActionUpdate
                                    },
                                        btnFieldWidth);
                                    GUI.enabled = true;
                                }
                                else
                                {
                                    UpdateCoreProccess(internalDependency.name,
                                                       internalDependency.ios_info.unity_content,
                                                       latestDependency.ios_info.unity_content, PlatformSdk.iOS);
                                }
                            }
                        }
                    }
                    else
                    {
                        if (internalDependency.android_info != null &&
                            !string.IsNullOrEmpty(internalDependency.android_info.version))
                        {
                            GUILayout.Space(56);
                            GUILayout.Button(
                                AppodealDependencyUtils.ReplaceBetaVersion(internalDependency.android_info.version),
                                packageInfoStyle, GUILayout.Width(110));
                            if (latestDependency.android_info != null &&
                                !string.IsNullOrEmpty(latestDependency.android_info.version))
                            {
                                GUILayout.Space(85);
                                GUILayout.Button(
                                    AppodealDependencyUtils.ReplaceBetaVersion(
                                        latestDependency.android_info.version),
                                    packageInfoStyle);
                                GUILayout.Space(15);

                                if (AppodealDependencyUtils.CompareVersion(
                                        internalDependency.android_info.version,
                                        latestDependency.android_info.version) == 0)
                                {
                                    GUI.enabled = false;
                                    GUILayout.Button(
                                        new GUIContent {
                                        text = AppodealDependencyUtils.ActionUpdate
                                    },
                                        btnFieldWidth);
                                    GUI.enabled = true;
                                }
                                else if (AppodealDependencyUtils.CompareVersion(
                                             internalDependency.android_info.version,
                                             latestDependency.android_info.version) > 0)
                                {
                                    GUI.enabled = false;
                                    GUILayout.Button(
                                        new GUIContent {
                                        text = AppodealDependencyUtils.ActionUpdate
                                    },
                                        btnFieldWidth);
                                    GUI.enabled = true;
                                }
                                else
                                {
                                    UpdateCoreProccess(internalDependency.name,
                                                       internalDependency.android_info.unity_content,
                                                       latestDependency.android_info.unity_content,
                                                       PlatformSdk.Android);
                                }
                            }
                        }
                    }
                }

                GUILayout.Space(5);
                GUILayout.Space(5);
                GUILayout.Space(5);
            }
        }
        private void GuiAdaptersRows(PlatformSdk platformSdk)
        {
            foreach (var key in latestDependencies.Keys)
            {
                if (internalDependencies.ContainsKey(key))
                {
                    if (key.Equals(AppodealDependencyUtils.Appodeal))
                    {
                        continue;
                    }

                    if (latestDependencies.TryGetValue(key, out var latestDependency) &&
                        internalDependencies.TryGetValue(key, out var internalDependency))
                    {
                        switch (platformSdk)
                        {
                        case PlatformSdk.Android:
                            if (internalDependency.android_info != null)
                            {
                                if (!string.IsNullOrEmpty(internalDependency.android_info.name) &&
                                    !string.IsNullOrEmpty(internalDependency.android_info.version) &&
                                    !string.IsNullOrEmpty(internalDependency.android_info.unity_content))
                                {
                                    SetAdapterUpdateInfo(latestDependency.name,
                                                         internalDependency.android_info.version,
                                                         latestDependency.android_info.version,
                                                         internalDependency.android_info.unity_content,
                                                         latestDependency.android_info.unity_content);
                                }
                            }
                            else
                            {
                                if (latestDependency.android_info.name != null)
                                {
                                    SetAdapterInformationForImport(latestDependency, platformSdk);
                                }
                            }

                            break;

                        case PlatformSdk.iOS:
                            if (internalDependency.ios_info != null && latestDependency.ios_info != null)
                            {
                                if (!string.IsNullOrEmpty(internalDependency.ios_info.name) &&
                                    !string.IsNullOrEmpty(internalDependency.ios_info.version) &&
                                    !string.IsNullOrEmpty(internalDependency.ios_info.unity_content))
                                {
                                    SetAdapterUpdateInfo(latestDependency.name,
                                                         internalDependency.ios_info.version,
                                                         latestDependency.ios_info.version,
                                                         internalDependency.ios_info.unity_content,
                                                         latestDependency.ios_info.unity_content);
                                }
                            }
                            else
                            {
                                if (latestDependency.ios_info?.name != null)
                                {
                                    SetAdapterInformationForImport(latestDependency, platformSdk);
                                }
                            }

                            break;
                        }
                    }
                }
                else
                {
                    if (latestDependencies.TryGetValue(key, out var networkDependency))
                    {
                        switch (platformSdk)
                        {
                        case PlatformSdk.Android:
                            if (networkDependency.android_info?.name != null)
                            {
                                SetAdapterInformationForImport(networkDependency, PlatformSdk.Android);
                            }

                            break;

                        case PlatformSdk.iOS:
                            if (networkDependency.ios_info?.name != null)
                            {
                                SetAdapterInformationForImport(networkDependency, PlatformSdk.iOS);
                            }

                            break;

                        default:
                            throw new ArgumentOutOfRangeException(nameof(platformSdk), platformSdk, null);
                        }
                    }
                }
            }
        }