using System;

namespace Flobbster.Windows.Forms
{
	public class PropertySpec
	{
		private Attribute[] attributes;

		private string category;

		private object defaultValue;

		private string description;

		private string editor;

		private string name;

		private string type;

		private string typeConverter;

		public Attribute[] Attributes
		{
			get
			{
				return attributes;
			}
			set
			{
				attributes = value;
			}
		}

		public string Category
		{
			get
			{
				return category;
			}
			set
			{
				category = value;
			}
		}

		public string ConverterTypeName
		{
			get
			{
				return typeConverter;
			}
			set
			{
				typeConverter = value;
			}
		}

		public object DefaultValue
		{
			get
			{
				return defaultValue;
			}
			set
			{
				defaultValue = value;
			}
		}

		public string Description
		{
			get
			{
				return description;
			}
			set
			{
				description = value;
			}
		}

		public string EditorTypeName
		{
			get
			{
				return editor;
			}
			set
			{
				editor = value;
			}
		}

		public string Name
		{
			get
			{
				return name;
			}
			set
			{
				name = value;
			}
		}

		public string TypeName
		{
			get
			{
				return type;
			}
			set
			{
				type = value;
			}
		}

		public PropertySpec(string name, string type)
			: this(name, type, null, null, null)
		{
		}

		public PropertySpec(string name, Type type)
			: this(name, type.AssemblyQualifiedName, null, null, null)
		{
		}

		public PropertySpec(string name, string type, string category)
			: this(name, type, category, null, null)
		{
		}

		public PropertySpec(string name, Type type, string category)
			: this(name, type.AssemblyQualifiedName, category, null, null)
		{
		}

		public PropertySpec(string name, string type, string category, string description)
			: this(name, type, category, description, null)
		{
		}

		public PropertySpec(string name, Type type, string category, string description)
			: this(name, type.AssemblyQualifiedName, category, description, null)
		{
		}

		public PropertySpec(string name, string type, string category, string description, object defaultValue)
		{
			this.name = name;
			this.type = type;
			this.category = category;
			this.description = description;
			this.defaultValue = defaultValue;
			attributes = null;
		}

		public PropertySpec(string name, Type type, string category, string description, object defaultValue)
			: this(name, type.AssemblyQualifiedName, category, description, defaultValue)
		{
		}

		public PropertySpec(string name, string type, string category, string description, object defaultValue, string editor, string typeConverter)
			: this(name, type, category, description, defaultValue)
		{
			this.editor = editor;
			this.typeConverter = typeConverter;
		}

		public PropertySpec(string name, Type type, string category, string description, object defaultValue, string editor, string typeConverter)
			: this(name, type.AssemblyQualifiedName, category, description, defaultValue, editor, typeConverter)
		{
		}

		public PropertySpec(string name, string type, string category, string description, object defaultValue, Type editor, string typeConverter)
			: this(name, type, category, description, defaultValue, editor.AssemblyQualifiedName, typeConverter)
		{
		}

		public PropertySpec(string name, Type type, string category, string description, object defaultValue, Type editor, string typeConverter)
			: this(name, type.AssemblyQualifiedName, category, description, defaultValue, editor.AssemblyQualifiedName, typeConverter)
		{
		}

		public PropertySpec(string name, string type, string category, string description, object defaultValue, string editor, Type typeConverter)
			: this(name, type, category, description, defaultValue, editor, typeConverter.AssemblyQualifiedName)
		{
		}

		public PropertySpec(string name, Type type, string category, string description, object defaultValue, string editor, Type typeConverter)
			: this(name, type.AssemblyQualifiedName, category, description, defaultValue, editor, typeConverter.AssemblyQualifiedName)
		{
		}

		public PropertySpec(string name, string type, string category, string description, object defaultValue, Type editor, Type typeConverter)
			: this(name, type, category, description, defaultValue, editor.AssemblyQualifiedName, typeConverter.AssemblyQualifiedName)
		{
		}

		public PropertySpec(string name, Type type, string category, string description, object defaultValue, Type editor, Type typeConverter)
			: this(name, type.AssemblyQualifiedName, category, description, defaultValue, editor.AssemblyQualifiedName, typeConverter.AssemblyQualifiedName)
		{
		}
	}
}
