using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace lr3
{
    public partial class Form14 : Form
    {
        public void disable_components(Control[] c) //блокує пакетно передані візуальні компоненти
        {
            foreach (Control e in c) e.Enabled = false; //перебираємо через змінну e компоненти та блокуємо їх
        }

        public void enable_components(Control[] c) //розблоковує пакетно передані компоненти
        {
            foreach (Control e in c) e.Enabled = true; //перебираємо через змінну e компоненти та розблоковуємо їх
        }

        public void hide_components(Control[] c) //ховаємо пакетно передані компоненти
        {
            foreach (Control e in c) e.Visible = false;//перебираємо через змінну е компоненти та ховаємо їх
        }

        public void show_components(Control[] c) //показуємо пакетно передані компоненти
        {
            foreach (Control e in c) e.Visible = true;//перебираємо через змінну е компоненти та показуємо їх
        }

        public bool alert_message(string msg, string cap) //показує повідомлення і повертає істину, якщо натиснута кнопка так
        {
            //показуємо повідомлення msg із заголовком cap і якщо відповідь так тоді повертаємо істину
            if (MessageBox.Show(msg, cap, MessageBoxButtons.YesNo) == DialogResult.Yes) return true;
            return false;//в іншому випадку повертаємо хибність
        }
        private MySqlConnection con;
        public Form14(MySqlConnection c)
        {
            InitializeComponent();
            con = c;
            tabControl1.SelectedIndex = 0;
            fill_grid("SELECT `sklad`.`id`, `materialy`.`material`, `sklad`.`kilkist`"
                + " FROM `sklad` JOIN `materialy` on `materialy`.`id`=`sklad`.`id_materialy`; ", dataGridView1,
          new string[] { "id" },//перелічуємо назви стовпців, які потрібно приховати
                new string[] { "material", "kilkist" },//перелічуємо назви стовпців транслітом
                new string[] { "Матеріали", "Кількість" });
            fill_combobox("SELECT * FROM `materialy`;", "id", "material", comboBox1);
            fill_combobox("SELECT * FROM `materialy`;", "id", "material", comboBox2);
        }
        private void fill_grid(string q, DataGridView d)
        {
            DataTable dt = new DataTable();
            if (con.State.ToString() != "Open") con.Open();
            MySqlCommand com = new MySqlCommand(q, con);
            MySqlDataReader dr = com.ExecuteReader();
            dt.Load(dr);
            d.DataSource = dt;
            dr.Close();
        }

        private void fill_grid(string q, DataGridView d, string[] f, string[] wn, string[] nn)
        { //Виконуємо запит і відображаємо результат на сітці та ховаємо у відображенні стовпці f
            //та переіменовуємо стовпці wn в nn
            fill_grid(q, d, f); // викликаємо перевантажену функцію яка заповнює сітку та ховає "непотрібні" поля
            for (int i = 0; i <= wn.Length - 1; i++)
            { //перебираємо кожне значення в wn
                d.Columns[wn[i]].HeaderText = nn[i];//присвоюємо стовпцю з назвою елемента wn нову назву з nn
            }

        }

        //=-=-=-=-=-=-=-= Перше перевантаження функції (тільки приховуємо)
        private void fill_grid(string q, DataGridView d, string[] f)
        { //Виконуємо запит і відображаємо результат на сітці та ховаємо у відображенні стовпці f
            fill_grid(q, d);//викликаємо перевантажену функцію, яка заповнює сітку
            foreach (string fn in f) //перебераємо всі значення f
            {
                d.Columns[fn].Visible = false;//ховаємо заданий стовпець
            }
        }

        public void fill_combobox(string q, string f_id, string f_name, ComboBox c)
        {
            DataGridView dgv = new DataGridView() { Parent = this, Visible = false };
            fill_grid(q, dgv);
            c.DataSource = null;
            c.Items.Clear();
            Dictionary<string, string> comboSource = new Dictionary<string, string>();
            foreach (DataGridViewRow r in dgv.Rows)
            {
                comboSource.Add(r.Cells[f_id].Value + "", r.Cells[f_name].Value + "");
            }
            c.DataSource = new BindingSource(comboSource, null);
            c.DisplayMember = "Value";
            c.ValueMember = "Key";
            c.Text = "";
        }

        private void run_query(string q)
        {
            if (con.State.ToString() != "Open") con.Open();
            MySqlCommand com = new MySqlCommand(q, con);
            com.ExecuteNonQuery();
        }




        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string s = textBox1.Text + "";
            fill_grid("SELECT `sklad`.`id`, `materialy`.`material`, `sklad`.`kilkist`"
                + " FROM `sklad` JOIN `materialy` on `materialy`.`id`=`sklad`.`id_materialy` WHERE `material` LIKE '%" + s + "%';", dataGridView1,
          new string[] { "id" },//перелічуємо назви стовпців, які потрібно приховати
                new string[] { "material", "kilkist" },//перелічуємо назви стовпців транслітом
                new string[] { "Матеріали", "Кількість" });
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string kilkist = textBox2.Text + "";
            string m_id = comboBox1.SelectedValue + "";
            if (m_id == "") m_id = "0";
            run_query("INSERT INTO `sklad` VALUES (NULL,'" + m_id + "','" + kilkist + "');");
            fill_grid("SELECT `sklad`.`id`,`materialy`.`material`, `sklad`.`kilkist`"
                 + " FROM `sklad` JOIN `materialy` on `materialy`.`id`=`sklad`.`id_materialy`; ", dataGridView1,
               new string[] { "id" },//перелічуємо назви стовпців, які потрібно приховати
               new string[] { "material", "kilkist" },//перелічуємо назви стовпців транслітом
               new string[] { "Матеріали", "Кількість" });
            textBox2.Text = ""; comboBox1.Text = "";
            button3_Click(this, null);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            string kilkist = textBox3.Text;
            string m_id = comboBox2.SelectedValue + "";
            if (m_id == "") m_id = "0";
            string id = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["id"].Value + "";
            run_query("UPDATE `sklad` SET `kilkist`='" + kilkist + "',`id_materialy`='" + m_id + "' WHERE `id`=" + id + ";");
            fill_grid("SELECT `sklad`.`id`,`materialy`.`material`, `sklad`.`kilkist`"
                 + " FROM `sklad` JOIN `materialy` on `materialy`.`id`=`sklad`.`id_materialy`; ", dataGridView1,
                new string[] { "id" },//перелічуємо назви стовпців, які потрібно приховати
                new string[] { "material", "kilkist" },//перелічуємо назви стовпців транслітом
                new string[] { "Матеріали", "Кількість" });
            button5_Click(this, null);
        }

        private void button5_Click(object sender, EventArgs e)
        {
            textBox3.Text = "";
            tabControl1.SelectedIndex = 0;
            enable_components(new Control[] { dataGridView1, textBox1, tabPage1 }); //розблоковуємо сітку, панель пошуку, вкладку додати
            hide_components(new Control[] { tabControl1, button5 }); //ховаємо панель вкладок, і цю кнопку
        }

        private void button6_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            enable_components(new Control[] { dataGridView1, tabPage2, textBox1 });//розблоковуємо сітку, вкладку редагувати і панель пошуку
            hide_components(new Control[] { tabControl1 });//ховаємо панель вкладок
        }



        private void додатиToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            show_components(new Control[] { tabControl1, button6 });//показуємо панель вкладок, та кнопку відмінити редагування
            disable_components(new Control[] { dataGridView1, tabPage2, textBox1 });//блокуємо сітку, вкладку редагувати, панель пошуку
        }

        private void видалитиToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            string id = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value + "";
            string materialy = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["material"].Value + "";

            if ((id != "") && (alert_message("Ви дійсно бажаєте видалити запис " + materialy + " ?", "Питання")))
            {
                run_query("DELETE FROM `sklad` WHERE `id`=" + id + ";");
                fill_grid("SELECT `sklad`.`id`,`materialy`.`material`, `sklad`.`kilkist`"
                 + " FROM `sklad` JOIN `materialy` on `materialy`.`id`=`sklad`.`id_materialy`; ", dataGridView1,
          new string[] { "id" },//перелічуємо назви стовпців, які потрібно приховати
                new string[] { "material", "kilkist" },//перелічуємо назви стовпців транслітом
                new string[] { "Матеріали", "Кількість" });
            }
        }

        private void редагуватиToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            show_components(new Control[] { tabControl1, button5 }); //(1)
            disable_components(new Control[] { dataGridView1, textBox1, tabPage1 });//(2)
            textBox3.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["kilkist"].Value + "";
            string p_id = comboBox2.SelectedValue + "";
            if (p_id == "") p_id = "0";
            tabControl1.SelectedIndex = 1;
        }
    }
}
