public static void ShowWindow()
        {
            try
            {
                volatileFile = UE.ReadSerializableResource <AdsSettings>(PersistentFolderName, PersistentFileName, FormatLog);
                if (volatileFile == null)
                {
                    volatileFile = new AdsSettings();
                }
            }
            catch (System.Exception)
            {
                volatileFile = new AdsSettings();
            }


            GetWindow <UnityAdsEditorWindow>("Ad Units");
        }
        private void OnGUI()
        {
            GUILayout.Space(10);

            volatileFile.androidGameId       = EditorGUILayout.TextField("Android Game Id: ", volatileFile.androidGameId);
            volatileFile.iOSGameId           = EditorGUILayout.TextField("iOS Game Id: ", volatileFile.iOSGameId);
            volatileFile.initializationDelay = EditorGUILayout.FloatField("Initialization Delay: ", volatileFile.initializationDelay);
            volatileFile.testMode            = EditorGUILayout.Toggle("Test Mode", volatileFile.testMode);
            volatileFile.showLogs            = EditorGUILayout.Toggle("Show Logs", volatileFile.showLogs);
            volatileFile.inNoSuportedDevicesAdsMustSucced = EditorGUILayout.Toggle("Unsuported Succed", volatileFile.inNoSuportedDevicesAdsMustSucced);

            GUILayout.Space(15);
            GUILayout.Label("AdUnits");

            if (GUILayout.Button("Add"))  // Save data to the permanent file
            {
                volatileFile.adUnits.Add(new AdUnitSettings());
            }
            if (GUILayout.Button("Delete"))  // Save data to the permanent file
            {
                if (volatileFile.adUnits.Count <= 0)
                {
                    return;
                }

                volatileFile.adUnits.RemoveAt(volatileFile.adUnits.Count - 1);
            }

            EditorGUI.indentLevel++;
            for (int i = 0; i < volatileFile.adUnits.Count; i++)
            {
                GUILayout.Space(10);

                var e = volatileFile.adUnits[i];

                e.className       = EditorGUILayout.TextField($"{i}. Class Name:", e.className);
                e.adFormat        = (AdFormat)EditorGUILayout.EnumPopup($"{i}. Ad Format:", e.adFormat);
                e.androidAdUnitId = EditorGUILayout.TextField($"{i}. Android AdUnit Id: ", e.androidAdUnitId);
                e.iOSAdUnitId     = EditorGUILayout.TextField($"{i}. iOS AdUnit Id: ", e.iOSAdUnitId);
                if (e.adFormat == AdFormat.Banner)
                {
                    e.bannerPosition = (BannerPosition)EditorGUILayout.EnumPopup($"{i}. Banner Position:", e.bannerPosition);
                }
            }
            EditorGUI.indentLevel--;


            GUILayout.Space(10);
            GUILayout.Label("Settings");

            if (GUILayout.Button("Save"))  // Save data to the permanent file
            {
                SaveSettingsFile();

                // Compile
                AssetDatabase.Refresh();
            }

            if (GUILayout.Button("Reset"))  // Delete persistent info
            {
                DeleteSettingsFile();
                volatileFile = new AdsSettings();

                // Compile
                AssetDatabase.Refresh();
            }

            GUILayout.Space(10);
            GUILayout.Label("C# classes");

            if (GUILayout.Button("Create"))  // Create the classes with permanent file Info
            {
                // Delete old files
                DeleteAllFiles();

                CreateFile(InitializerFolderName, InitializerFileName, InitializerFile, FormatLog);           // Initializer file
                CreateFile(StartupFolderName, StartupFileName, StartupFile(volatileFile.adUnits), FormatLog); // Startup file
                CreateFile(SettingsFolderName, SettingsFileName, SettingsFile(volatileFile), FormatLog);      // Settings file

                foreach (var adUnit in volatileFile.adUnits)
                {
                    if (adUnit.adFormat == AdFormat.Banner)
                    {
                        CreateFile(AdUnitFolderName, AdUnitFileName(adUnit), AdUnitBannerFile(adUnit), FormatLog);                                      // Adunit file
                    }
                    else
                    {
                        CreateFile(AdUnitFolderName, AdUnitFileName(adUnit), AdUnitInterstitialOrRewardedFile(adUnit), FormatLog);   // Adunit file
                    }
                }

                // Close the window
                this.Close();

                // Compile
                AssetDatabase.Refresh();
            }

            if (GUILayout.Button("Delete"))  // Delete clases, but not the permanent file info
            {
                DeleteAllFiles();

                // Close the window
                this.Close();

                // Compile
                AssetDatabase.Refresh();
            }
        }
        private static string[] SettingsFile(AdsSettings settings)
        {
            var file = new List <string>();

            // FI1
            var fi1 = new string[]
            {
                "",
                "public static partial class Env",
                "{",
                "    public static partial class UnityAdsSettings",
                "    {",
                "",
                "        // AdUnit Class",
                "        public class AddUnit",
                "        {",
                "            public string androidAdUnitId { get; set; }",
                "            public string iOSAdUnitId { get; set; }",
                "            public UnityEngine.Advertisements.BannerPosition possitionIfIsBanner {get; set;}",
                "        }",
                "",
                "",
                "        public static string androidGameId => " + quote + "" + settings.androidGameId + "" + quote + ";",
                "        public static string iOSGameId => " + quote + "" + settings.iOSGameId + "" + quote + "; ",
                "        public static float initializationDelay => " + settings.initializationDelay + "f;",
                "        public static bool testMode => " + PrintBool(settings.testMode) + ";",
                "        public static bool showLogs => " + PrintBool(settings.showLogs) + ";",
                "        public static bool InNoSuportedDevicesAdsMustSucced => " + PrintBool(settings.inNoSuportedDevicesAdsMustSucced) + ";",
                "",
                "        // Suported platforms must be true",
                "#if UNITY_ANDROID || UNITY_IOS",
                "        public static bool IsSupported => true;",
                "#else",
                "        public static bool IsSupported => false;",
                "#endif",
                "",
                "",
                "",
            };

            foreach (var line in fi1)
            {
                file.Add(line);
            }

            // FI2
            foreach (var adUnit in settings.adUnits)
            {
                file.Add($"        public static AddUnit {adUnit.className}Settings => new AddUnit");
                file.Add("        {");
                file.Add("            androidAdUnitId = " + quote + "" + adUnit.androidAdUnitId + "" + quote + ", ");
                file.Add("            iOSAdUnitId = " + quote + "" + adUnit.iOSAdUnitId + "" + quote + ", ");
                if (adUnit.adFormat == AdFormat.Banner)
                {
                    file.Add($"            possitionIfIsBanner = UnityEngine.Advertisements.BannerPosition." + adUnit.bannerPosition + ",");
                }
                file.Add("        };");
                file.Add($"");
            }

            // FI3
            var fi3 = new string[]
            {
                "    }",
                "",
                "}",
            };

            foreach (var line in fi3)
            {
                file.Add(line);
            }

            // FILE
            return(file.ToArray());
        }