using System.Drawing;
using System.Windows.Forms;
using FizzyLauncher.Models;
using RyzStudio.Windows.Forms;
using RyzStudio.Windows.ThemedForms;
using RyzStudio.Windows.ThemedForms.ButtonTextBox;
using RyzStudio.Windows.ThemedForms.PickerBox;
using static RyzStudio.Windows.ThemedForms.ButtonTextBox.ThKeyCodeTextBox;

namespace FizzyLauncher
{
    public class EditTileForm : TDialog
    {
        private Label label6;
        private Label label7;
        private Label label4;
        private Label label3;
        private Label label2;
        private Label label1;
        private ThPathDialogTextBox textBox2;
        private ThClearableTextBox textBox3;
        private ThPathDialogTextBox textBox4;
        private ThButton button1;
        private ThPickerBox pickerBox1;
        private ThYesNoPickerBox pickerBox2;
        private THorizontalSeparator horizontalSeparator1;
        private THorizontalSeparator horizontalSeparator2;
        private ThClearableTextBox textBox1;

        private TileModel result = null;


        public EditTileForm(TileModel model = null)
        {
            InitializeComponent();

            StartPosition = FormStartPosition.WindowsDefaultLocation;
            OkButton = button1;

            result = model;

            pickerBox1.ComboBox.Items.Clear();
            pickerBox1.ComboBox.Items.AddRange(new string[] { "Normal", "Hidden", "Minimized", "Maximized" });
            if (pickerBox1.ComboBox.Items.Count > 0)
            {
                pickerBox1.ComboBox.SelectedIndex = 0;
            }

            if (result != null)
            {
                Text = "Edit Tile";

                textBox1.Text = result?.Title ?? string.Empty;
                textBox2.Text = result?.ProcessFilename ?? string.Empty;
                textBox3.Text = result?.ProcessArgument ?? string.Empty;
                textBox4.Text = result?.ProcessWorkingDirectory ?? string.Empty;
                pickerBox1.ComboBox.SelectedIndex = (int)result.ProcessWindowStyle;
                pickerBox2.Value = result.ProcessAsAdmin;
            }
            else
            {
                Text = "Add Tile";
            }
        }

        private void InitializeComponent()
        {
            textBox1 = new ThClearableTextBox();
            label6 = new Label();
            label7 = new Label();
            label4 = new Label();
            label3 = new Label();
            label2 = new Label();
            label1 = new Label();
            textBox2 = new ThPathDialogTextBox();
            textBox3 = new ThClearableTextBox();
            textBox4 = new ThPathDialogTextBox();
            button1 = new ThButton();
            pickerBox1 = new ThPickerBox();
            pickerBox2 = new ThYesNoPickerBox();
            horizontalSeparator1 = new THorizontalSeparator();
            horizontalSeparator2 = new THorizontalSeparator();
            SuspendLayout();
            //
            // textBox1
            //
            textBox1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
            textBox1.BackColor = Color.Transparent;
            textBox1.EnableReactiveVisual = true;
            textBox1.Font = new Font("Segoe UI", 9F);
            textBox1.Location = new Point(126, 20);
            textBox1.Name = "textBox1";
            textBox1.Size = new Size(243, 35);
            textBox1.TabIndex = 152;
            textBox1.TabStop = false;
            textBox1.UseSystemPasswordChar = false;
            //
            // label6
            //
            label6.AutoSize = true;
            label6.BackColor = Color.Transparent;
            label6.ForeColor = SystemColors.ControlText;
            label6.Location = new Point(10, 250);
            label6.Name = "label6";
            label6.Padding = new Padding(0, 9, 0, 10);
            label6.Size = new Size(83, 34);
            label6.TabIndex = 163;
            label6.Text = "Run As Admin";
            label6.TextAlign = ContentAlignment.MiddleLeft;
            //
            // label7
            //
            label7.AutoSize = true;
            label7.BackColor = Color.Transparent;
            label7.ForeColor = SystemColors.ControlText;
            label7.Location = new Point(10, 209);
            label7.Name = "label7";
            label7.Padding = new Padding(0, 9, 0, 10);
            label7.Size = new Size(79, 34);
            label7.TabIndex = 161;
            label7.Text = "Window Style";
            label7.TextAlign = ContentAlignment.MiddleLeft;
            //
            // label4
            //
            label4.AutoSize = true;
            label4.BackColor = Color.Transparent;
            label4.ForeColor = SystemColors.ControlText;
            label4.Location = new Point(10, 144);
            label4.Name = "label4";
            label4.Padding = new Padding(0, 9, 0, 10);
            label4.Size = new Size(103, 34);
            label4.TabIndex = 159;
            label4.Text = "Working Directory";
            label4.TextAlign = ContentAlignment.MiddleLeft;
            //
            // label3
            //
            label3.AutoSize = true;
            label3.BackColor = Color.Transparent;
            label3.ForeColor = SystemColors.ControlText;
            label3.Location = new Point(10, 103);
            label3.Name = "label3";
            label3.Padding = new Padding(0, 9, 0, 10);
            label3.Size = new Size(61, 34);
            label3.TabIndex = 157;
            label3.Text = "Argument";
            label3.TextAlign = ContentAlignment.MiddleLeft;
            //
            // label2
            //
            label2.AutoSize = true;
            label2.BackColor = Color.Transparent;
            label2.ForeColor = SystemColors.ControlText;
            label2.Location = new Point(10, 62);
            label2.Name = "label2";
            label2.Padding = new Padding(0, 9, 0, 10);
            label2.Size = new Size(55, 34);
            label2.TabIndex = 155;
            label2.Text = "Filename";
            label2.TextAlign = ContentAlignment.MiddleLeft;
            //
            // label1
            //
            label1.AutoSize = true;
            label1.BackColor = Color.Transparent;
            label1.ForeColor = SystemColors.ControlText;
            label1.Location = new Point(10, 21);
            label1.Margin = new Padding(0);
            label1.Name = "label1";
            label1.Padding = new Padding(0, 9, 0, 10);
            label1.Size = new Size(29, 34);
            label1.TabIndex = 153;
            label1.Text = "Title";
            label1.TextAlign = ContentAlignment.MiddleLeft;
            //
            // textBox2
            //
            textBox2.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
            textBox2.BackColor = Color.Transparent;
            textBox2.DialogMode = ThPathDialogTextBox.DialogType.OpenFile;
            textBox2.EnableReactiveVisual = true;
            textBox2.Font = new Font("Segoe UI", 9F);
            textBox2.Location = new Point(126, 61);
            textBox2.Margin = new Padding(10, 10, 10, 0);
            textBox2.Name = "textBox2";
            textBox2.Size = new Size(243, 32);
            textBox2.TabIndex = 170;
            textBox2.TabStop = false;
            textBox2.UseSystemPasswordChar = false;
            //
            // textBox3
            //
            textBox3.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
            textBox3.BackColor = Color.Transparent;
            textBox3.EnableReactiveVisual = true;
            textBox3.Font = new Font("Segoe UI", 9F);
            textBox3.Location = new Point(147, 102);
            textBox3.Name = "textBox3";
            textBox3.Size = new Size(222, 35);
            textBox3.TabIndex = 171;
            textBox3.TabStop = false;
            //
            // textBox4
            //
            textBox4.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
            textBox4.BackColor = Color.Transparent;
            textBox4.DialogMode = ThPathDialogTextBox.DialogType.FolderBrowser;
            textBox4.EnableReactiveVisual = true;
            textBox4.Font = new Font("Segoe UI", 9F);
            textBox4.Location = new Point(147, 143);
            textBox4.Name = "textBox4";
            textBox4.Size = new Size(222, 32);
            textBox4.TabIndex = 172;
            textBox4.TabStop = false;
            textBox4.UseSystemPasswordChar = false;
            //
            // button1
            //
            button1.AcceptButton = null;
            button1.ActiveImage = null;
            button1.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
            button1.BackColor = Color.Transparent;
            button1.EnableMenuOnClick = false;
            button1.EnableReactiveVisual = true;
            button1.HoverImage = null;
            button1.IdleImage = null;
            button1.LabelText = "&Save";
            button1.Location = new Point(241, 469);
            button1.Margin = new Padding(10, 10, 10, 0);
            button1.Name = "button1";
            button1.Padding = new Padding(4, 4, 3, 3);
            button1.Size = new Size(128, 32);
            button1.TabIndex = 173;
            button1.TabStop = false;
            //
            // pickerBox1
            //
            pickerBox1.AcceptButton = null;
            pickerBox1.Anchor = AnchorStyles.Top | AnchorStyles.Right;
            pickerBox1.BackColor = Color.Transparent;
            pickerBox1.EnableReactiveVisual = true;
            pickerBox1.Font = new Font("Segoe UI", 9F);
            pickerBox1.Location = new Point(241, 209);
            pickerBox1.Margin = new Padding(10, 10, 10, 0);
            pickerBox1.Name = "pickerBox1";
            pickerBox1.Padding = new Padding(4, 4, 3, 3);
            pickerBox1.SelectedIndex = -1;
            pickerBox1.Size = new Size(128, 34);
            pickerBox1.TabIndex = 174;
            pickerBox1.TabStop = false;
            //
            // pickerBox2
            //
            pickerBox2.Anchor = AnchorStyles.Top | AnchorStyles.Right;
            pickerBox2.BackColor = Color.Transparent;
            pickerBox2.EnableReactiveVisual = true;
            pickerBox2.Font = new Font("Segoe UI", 9F);
            pickerBox2.Location = new Point(285, 250);
            pickerBox2.Name = "pickerBox2";
            pickerBox2.Size = new Size(84, 34);
            pickerBox2.TabIndex = 175;
            pickerBox2.TabStop = false;
            //
            // horizontalSeparator1
            //
            horizontalSeparator1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
            horizontalSeparator1.AutoScrollMargin = new Size(0, 0);
            horizontalSeparator1.AutoScrollMinSize = new Size(0, 0);
            horizontalSeparator1.BackColor = Color.Transparent;
            horizontalSeparator1.Location = new Point(10, 181);
            horizontalSeparator1.Margin = new Padding(0, 10, 0, 0);
            horizontalSeparator1.MaximumSize = new Size(4920, 2);
            horizontalSeparator1.MinimumSize = new Size(0, 22);
            horizontalSeparator1.Name = "horizontalSeparator1";
            horizontalSeparator1.Size = new Size(364, 22);
            horizontalSeparator1.TabIndex = 176;
            horizontalSeparator1.TabStop = false;
            //
            // horizontalSeparator2
            //
            horizontalSeparator2.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
            horizontalSeparator2.AutoScrollMargin = new Size(0, 0);
            horizontalSeparator2.AutoScrollMinSize = new Size(0, 0);
            horizontalSeparator2.BackColor = Color.Transparent;
            horizontalSeparator2.Location = new Point(10, 437);
            horizontalSeparator2.Margin = new Padding(0, 10, 0, 0);
            horizontalSeparator2.MaximumSize = new Size(4920, 2);
            horizontalSeparator2.MinimumSize = new Size(0, 22);
            horizontalSeparator2.Name = "horizontalSeparator2";
            horizontalSeparator2.Size = new Size(364, 22);
            horizontalSeparator2.TabIndex = 177;
            horizontalSeparator2.TabStop = false;
            //
            // EditTileForm
            //
            ClientSize = new Size(384, 521);
            Controls.Add(horizontalSeparator2);
            Controls.Add(horizontalSeparator1);
            Controls.Add(pickerBox2);
            Controls.Add(pickerBox1);
            Controls.Add(button1);
            Controls.Add(textBox4);
            Controls.Add(textBox3);
            Controls.Add(textBox2);
            Controls.Add(label6);
            Controls.Add(label7);
            Controls.Add(label4);
            Controls.Add(label3);
            Controls.Add(label2);
            Controls.Add(label1);
            Controls.Add(textBox1);
            MinimumSize = new Size(400, 560);
            Name = "EditTileForm";
            Text = "Add Tile";
            ResumeLayout(false);
            PerformLayout();
        }


        public TileModel Result
        {
            get
            {
                if (result == null)
                {
                    result = new TileModel();
                }

                result.Title = textBox1.Text?.Trim() ?? string.Empty;
                result.ProcessFilename = textBox2.Text?.Trim() ?? string.Empty;
                result.ProcessArgument = textBox3.Text?.Trim() ?? string.Empty;
                result.ProcessWorkingDirectory = textBox4.Text?.Trim();
                result.ProcessWindowStyle = (System.Diagnostics.ProcessWindowStyle)pickerBox1.ComboBox.SelectedIndex;
                result.ProcessAsAdmin = pickerBox2.Value;

                return result;
            }
        }

    }
}