// ReSharper disable once FlagArgument
        public static string InterfaceTypesToString(FirewallInterfaceTypes types)
        {
            var interfaceTypes = new List <string>();

            if (EnumHelper.HasFlag(types, FirewallInterfaceTypes.Lan) &&
                EnumHelper.HasFlag(types, FirewallInterfaceTypes.Wireless) &&
                EnumHelper.HasFlag(types, FirewallInterfaceTypes.RemoteAccess))
            {
                return("All");
            }

            if (EnumHelper.HasFlag(types, FirewallInterfaceTypes.Lan))
            {
                interfaceTypes.Add("Lan");
            }

            if (EnumHelper.HasFlag(types, FirewallInterfaceTypes.Wireless))
            {
                interfaceTypes.Add("Wireless");
            }

            if (EnumHelper.HasFlag(types, FirewallInterfaceTypes.RemoteAccess))
            {
                interfaceTypes.Add("RemoteAccess");
            }

            return(string.Join(",", interfaceTypes.ToArray()));
        }
        // ReSharper disable once ExcessiveIndentation
        public static FirewallInterfaceTypes StringToInterfaceTypes(string str)
        {
            if (string.IsNullOrEmpty(str?.Trim()))
            {
                return(FirewallInterfaceTypes.Lan |
                       FirewallInterfaceTypes.RemoteAccess |
                       FirewallInterfaceTypes.Wireless);
            }

            FirewallInterfaceTypes value = 0;

            foreach (var interfaceType in str.Split(','))
            {
                if (string.Equals(interfaceType.Trim(), @"All", StringComparison.OrdinalIgnoreCase))
                {
                    return(FirewallInterfaceTypes.Lan |
                           FirewallInterfaceTypes.RemoteAccess |
                           FirewallInterfaceTypes.Wireless);
                }

                if (string.Equals(interfaceType.Trim(), @"RemoteAccess", StringComparison.OrdinalIgnoreCase))
                {
                    value |= FirewallInterfaceTypes.RemoteAccess;
                }
                else if (string.Equals(interfaceType.Trim(), @"Wireless", StringComparison.OrdinalIgnoreCase))
                {
                    value |= FirewallInterfaceTypes.Wireless;
                }
                else if (string.Equals(interfaceType.Trim(), @"Lan", StringComparison.OrdinalIgnoreCase))
                {
                    value |= FirewallInterfaceTypes.Lan;
                }
            }

            if (value == 0)
            {
                return(FirewallInterfaceTypes.Lan |
                       FirewallInterfaceTypes.RemoteAccess |
                       FirewallInterfaceTypes.Wireless);
            }

            return(value);
        }