using System;
using System.ComponentModel;

namespace MiniObfuscator.Core.Enums
{
  [Flags]
  public enum Members
  {
    None = 0,
    [Description("Obfuscate namespaces")]
    Namespaces = 1,
    [Description("Obfuscate types(not interfaces)")]
    Types = 2,
    [Description("Obfuscate methods")]
    Methods = 4,
    [Description("Obfuscate fields")]
    Fields = 8,
    [Description("Obfuscate properties")]
    Properties = 16,
    [Description("Obfuscate events")]
    Events = 32,
    [Description("Obfuscate public members")]
    Public = 64,
    [Description("Obfuscate interfaces")]
    Interfaces = 128,
    [Description("Obfuscate method parameters")]
    Parameters = 256,
    [Description("Use obfuscation control attributes")]
    UseAttributes = 512,
    [Description("Obfuscate resources that connected to obfuscated type. Not connected to type resources does not obfuscated)")]
    Resources = 1024,
    [Description("Obfuscate overridable members (methods, properties(if contains overridable methods)))")]
    Overridables = 2048,
    [Description("Obfuscate Enums(type name and field names)")]
    Enums = 4096,
    [Description("Obfuscate structures(type name and field names)")]
    Structures = 8192,
    [Description("Obfuscates protected members(visible to inheritors)")]
    Protected = 16384,
    [Description("Leave members of classes, generated by compiler (marked by CompilerGeneratedAttribute) untouched.")]
    LeaveGeneratedByCompiler = 32768,
    [Description("Leave members marked by DebuggerHiddenAttribute untouched.")]
    LeaveDebuggerHidden = 65536,
    [Description("Leave serializable members marked by SerializableAttribute, Xml.Serialization attributes, or ISerializable implementors untouched.")]
    LeaveSerializables = 131072,
    [Description("Default obfuscation control attributes (recommended for DLL's)")]
    Default = LeaveDebuggerHidden | LeaveGeneratedByCompiler | Protected | Resources | UseAttributes | Parameters | Interfaces | Fields | Methods | Types | Namespaces,
    [Description("More high obfuscation level than Default level (recommended for commercial component DLL's)")]
    DefaultImproved = Default | Structures | Enums | Events | Properties,
    [Description("Obfuscation level that keeps inheritance (doesn't obfuscated protected members)")]
    KeepsInheritance = LeaveDebuggerHidden | LeaveGeneratedByCompiler | Structures | Enums | Resources | UseAttributes | Parameters | Interfaces | Events | Properties | Fields | Methods | Types | Namespaces,
    [Description("Keeps serialization members (properties, structures, enums, Add methods in collections) unobfuscated")]
    KeepsSerialization = Default | LeaveSerializables | Public,
    [Description("Full obfuscation control attributes (recommended for EXE's)")]
    Full = KeepsInheritance | Protected | Overridables | Public,
  }
}
