using System;
using System.Windows.Forms;

namespace CodeImp.DoomBuilder.BuilderModes
{
	internal partial class InsertThingsRadiallyOptionsPanel : UserControl
	{
		public event EventHandler OnValueChanged;
		private bool blockEvents;

		public int Number { get { return (int)number.Value; } set { blockEvents = true; number.Value = value; blockEvents = false; } }
		public int MaxNumber { get { return (int)number.Maximum; } set { number.Maximum = value; } }
		public int MinNumber { get { return (int)number.Minimum; } set { number.Minimum = value; } }
		public int Radius { get { return (int)radius.Value; } set { blockEvents = true; radius.Value = value; blockEvents = false; } }
		public int MaxRadius { get { return (int)radius.Maximum; } set { radius.Maximum = value; } }
		public int MinRadius { get { return (int)radius.Minimum; } set { radius.Minimum = value; } }
        public bool SnapToGrid { get { return snaptogrid.Checked; } set { snaptogrid.Checked = value; } }
        public int Type { get { return (int)type.Value; } set { type.Value = value; } }
        public int Parameter { get { return (int)parameter.Value; } set { parameter.Value = value; } }

        public InsertThingsRadiallyOptionsPanel() 
		{
			InitializeComponent();
            radius.Value = General.Map.Grid.GridSize;
        }

        public void Register() 
		{
            number.ValueChanged += ValueChanged;
            radius.ValueChanged += ValueChanged;
            snaptogrid.CheckedChanged += ValueChanged;
            type.ValueChanged += ValueChanged;
            parameter.ValueChanged += ValueChanged;

            General.Interface.AddButton(numberlabel);
            General.Interface.AddButton(number);
            General.Interface.AddButton(radiuslabel);
			General.Interface.AddButton(radius);
            General.Interface.AddButton(snaptogrid);
            General.Interface.AddButton(typelabel);
            General.Interface.AddButton(type);
            General.Interface.AddButton(browse);
            General.Interface.AddButton(parameterlabel);
            General.Interface.AddButton(parameter);
            General.Interface.AddButton(reset);
		}

		public void Unregister() 
		{
			General.Interface.RemoveButton(reset);
            General.Interface.RemoveButton(parameter);
            General.Interface.RemoveButton(parameterlabel);
            General.Interface.RemoveButton(browse);
            General.Interface.RemoveButton(type);
            General.Interface.RemoveButton(typelabel);
            General.Interface.RemoveButton(snaptogrid);
            General.Interface.RemoveButton(radius);
			General.Interface.RemoveButton(radiuslabel);
            General.Interface.RemoveButton(number);
            General.Interface.RemoveButton(numberlabel);
        }

        private void ValueChanged(object sender, EventArgs e) 
		{
			if(!blockEvents && OnValueChanged != null) OnValueChanged(this, EventArgs.Empty);
		}

		private void reset_Click(object sender, EventArgs e) 
		{
			blockEvents = true;
            parameter.Value = 0;
            type.Value = 1;
            snaptogrid.Checked = false;
            radius.Value = General.Map.Grid.GridSize;
			blockEvents = false;
            number.Value = 8;
        }

        private void browse_Click(object sender, EventArgs e)
        {
            type.Value = General.Interface.BrowseThingType(BuilderPlug.Me.MenusForm, (int)type.Value);
        }
    }
}
