namespace System.IO.Compression
{
    using System.Diagnostics;

    internal enum CompressionTracingSwitchLevel {
        Off = 0,
        Informational = 1,
        Verbose = 2
    }

    // No tracing on Silverlight nor Windows Phone 7.
    internal class CompressionTracingSwitch
#if !FEATURE_NETCORE
        : Switch
#endif // !FEATURE_NETCORE
    {
        internal readonly static CompressionTracingSwitch tracingSwitch =
            new CompressionTracingSwitch("CompressionSwitch", "Compression Library Tracing Switch");

        internal CompressionTracingSwitch(string displayName, string description)
#if !FEATURE_NETCORE
            : base(displayName, description)
#endif // !FEATURE_NETCORE
        {
        }

        public static bool Verbose {
            get {
#if FEATURE_NETCORE
                return false;
#else
                return tracingSwitch.SwitchSetting >= (int)CompressionTracingSwitchLevel.Verbose;
#endif
            }
        }

        public static bool Informational {
            get {
#if FEATURE_NETCORE
                return false;
#else
                return tracingSwitch.SwitchSetting >= (int)CompressionTracingSwitchLevel.Informational;
#endif
            }
        }

#if ENABLE_TRACING
        public void SetSwitchSetting(CompressionTracingSwitchLevel level) {
            if (level < CompressionTracingSwitchLevel.Off || level > CompressionTracingSwitchLevel.Verbose) {
                throw new ArgumentOutOfRangeException("level");
            }
            this.SwitchSetting = (int)level;
        }
#endif

    }    
}