internal static void WriteTempContent(SpinProxiesRootResponse data, SpinProxiesProxyClass proxyClass)
        {
            // For viewing live data
            try
            {
                string content = data.ToJson();

                var normalizedProxyClass  = proxyClass.ToString().ToLower();
                var tempProxyListFilePath = String.Format(tempProxyListFilePathFormat, normalizedProxyClass);
                lock (locker)
                {
                    File.WriteAllText(tempProxyListFilePath, content);
                }
            }
            catch { }
        }
        private static void WriteMasterContent(SpinProxiesRootResponse data, SpinProxiesProxyClass proxyClass, bool writeOriginalFile = true)
        {
            string content = data.ToJson();

            var normalizedProxyClass    = proxyClass.ToString().ToLower();
            var masterProxyListFilePath = String.Format(masterProxyListFilePathFormat, normalizedProxyClass);

            lock (locker)
            {
                File.WriteAllText(masterProxyListFilePath, content);

                if (writeOriginalFile)
                {
                    var projectMasterProxyListFilePath = $"../../../{masterProxyListFilePath}";
                    if (File.Exists(projectMasterProxyListFilePath))
                    {
                        File.WriteAllText(projectMasterProxyListFilePath, content);
                    }
                }
            }
        }
        public SpinProxiesRootResponse FetchProxyList(SpinProxiesProxyClass proxyClass)
        {
            const string apiKey = "qmml9lwkny4j3x9yyt4ed2oscp20lu";

            var normalizedProxyClass = proxyClass.ToString().ToLower();

            using (var client = new WebClient())
            {
                client.Headers[HttpRequestHeader.Accept] = "application/json";
                string result = null;

                try
                {
                    result = client.DownloadString(
                        $"https://spinproxies.com/api/v1/proxylist?key={apiKey}&type=anonymous&protocols={normalizedProxyClass}&format=json"
                        );
                }
                catch { }

                SpinProxiesRootResponse data = null;

                if (!String.IsNullOrEmpty(result))
                {
                    try
                    {
                        data = SpinProxiesRootResponse.FromJson(result);
                    }
                    catch { }
                }

                var masterProxyListFilePath = String.Format(masterProxyListFilePathFormat, normalizedProxyClass);

                if (null != data)
                {
                    if (File.Exists(masterProxyListFilePath))
                    {
                        var temp       = File.ReadAllText(masterProxyListFilePath);
                        var storedData = SpinProxiesRootResponse.FromJson(temp);

                        storedData.Data.Proxies.AddRange(data.Data.Proxies);

                        var uniqueProxies = storedData.Data.Proxies.GroupBy(w => new { w.Ip, w.Port }).Select(w => w.FirstOrDefault());
                        storedData.Data.Proxies = uniqueProxies.ToList();

                        WriteMasterContent(storedData, proxyClass);

                        return(storedData);
                    }
                    else
                    {
                        WriteMasterContent(data, proxyClass);
                    }
                }
                else
                {
                    if (File.Exists(masterProxyListFilePath))
                    {
                        var temp       = File.ReadAllText(masterProxyListFilePath);
                        var storedData = SpinProxiesRootResponse.FromJson(temp);

                        return(storedData);
                    }
                }

                return(data);
            }
        }