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 Form3 : 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;//в іншому випадку повертаємо хибність
        }
        static string cs = new MySqlConnectionStringBuilder()
        {
            UserID = "Jtryb",
            Password = "igilof99",
            Database = "ek31Trybushynina",
            Server = "127.0.0.1"
        }.ConnectionString;

        public MySqlConnection con = new MySqlConnection(cs);

         public Form3(MySqlConnection c) 
        {
            InitializeComponent();
            con = c; 
            fill_grid("SELECT * FROM `poslugy`;", dataGridView1,
                new string[] {  "id" },//перелічуємо назви стовпців, які потрібно приховати
                new string[] {  "Name", "price" },//перелічуємо назви стовпців транслітом
                new string[] { "Назва послуги", "Ціна"}); 
 
        }

         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;//ховаємо заданий стовпець
             }
         }

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

        }

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

        private void редагуватиToolStripMenuItem_Click(object sender, EventArgs e)
        {
            textBox6.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["Name"].Value + "";
            textBox7.Text = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["price"].Value + "";
            show_components(new Control[] { tabControl1, button5 }); //(1)
            disable_components(new Control[] { dataGridView1, textBox1, textBox2, tabPage1 });//(2)
            tabControl1.SelectedIndex = 1; 
        }

        private void видалитиToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string id = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[0].Value + "";
            string name = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["name"].Value + "";
            if ((id != "") && (alert_message("Ви дійсно бажаєте видалити запис " + name + " ?", "Питання")))
            {
                run_query("DELETE FROM `poslugy` WHERE `id`=" + id + ";");
                fill_grid("SELECT * FROM `poslugy`;", dataGridView1,
                new string[] { "id" },//перелічуємо назви стовпців, які потрібно приховати
                new string[] { "Name", "price" },//перелічуємо назви стовпців транслітом
                new string[] { "Назва послуги", "Ціна" });

            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string s = textBox1.Text + "";
            fill_grid("SELECT * FROM `poslugy` WHERE `Name` LIKE '%" + s + "%';", dataGridView1,
                new string[] { "id" },//перелічуємо назви стовпців, які потрібно приховати
                new string[] { "Name", "price" },//перелічуємо назви стовпців транслітом
                new string[] { "Назва послуги", "Ціна" });
        }

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

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            string s = textBox2.Text + "";
            fill_grid("SELECT * FROM `poslugy` WHERE `Name` LIKE '%" + s + "%';", dataGridView1,
                new string[] { "id" },//перелічуємо назви стовпців, які потрібно приховати
                new string[] { "Name", "price" },//перелічуємо назви стовпців транслітом
                new string[] { "Назва послуги", "Ціна" });
        }

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

        private void button3_Click(object sender, EventArgs e)
        {
            string Name = textBox3.Text + "";
            string price = textBox4.Text + "";
            run_query("INSERT INTO `poslugy` VALUES (NULL,'" + Name + "','" + price + "');");
            fill_grid("SELECT * FROM `poslugy`;", dataGridView1,
                new string[] { "id" },//перелічуємо назви стовпців, які потрібно приховати
                new string[] { "Name", "price" },//перелічуємо назви стовпців транслітом
                new string[] { "Назва послуги", "Ціна" });
            textBox3.Text = ""; textBox4.Text = ""; 
            button7_Click(this, null);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            string Name = textBox6.Text; string price = textBox7.Text; 
            string id = dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells["id"].Value + "";
            run_query("UPDATE `poslugy` SET `Name`='" + Name + "',`price`='" + price +  "' WHERE `id`=" + id + ";");
            fill_grid("SELECT * FROM `poslugy`;", dataGridView1,
                new string[] { "id" },//перелічуємо назви стовпців, які потрібно приховати
                new string[] { "Name", "price" },//перелічуємо назви стовпців транслітом
                new string[] { "Назва послуги", "Ціна" });
            button5_Click(this, null); 
        }

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

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }

        private void Form3_Load(object sender, EventArgs e)
        {

        }

        private void експортуватиВExcelToolStripMenuItem_Click(object sender, EventArgs e)
        {
            expExcel exp = new expExcel(); //створюємо екземпляр нашого нового гласу
            exp.RunExcel(); //завантажуємо ексель
            exp.InCell(3, 1, "Список послуг"); //додаємо назву нашому звіту
            exp.FormatFont(3, 1, true, false, true, 0, 24, "Times New Roman"); //форматуємо заголовок звіту
            exp.InCell(4, 2, "Дата: " + DateTime.Now.ToString());//додаємо поточну дату
            exp.InsertTable(dataGridView1, 2, 4, 0, "Arial", true, false, false, 0, 0, "Times New Roman", false, true, false, 0);
            //вставляємо та форматуємо дані з сітки
        }

        private void Form3_Load_1(object sender, EventArgs e)
        {

        }

        private void експортуватиВWordToolStripMenuItem_Click(object sender, EventArgs e)
        {
            expWord exp = new expWord();//створюємо наш обєкт ворду
            exp.loadWord();//завантажуємо ворд, і показуємо на екрані
            exp.setFont(1, 0, 0, 24, 0, "Times New Roman", exp.ACenter);//задаємо шрифт та форматування, яким будемо виводити загоовок
            //виводимо заголовок і дату формування звіту
            exp.wordapp.Selection.TypeText("Список послуг " + DateTime.Now.ToString());
            exp.wordapp.Selection.TypeParagraph();//вставляємо 2
            exp.wordapp.Selection.TypeParagraph();//нових рядки
            exp.setFont(0, 0, 0, 14);//змінюємо розмір шрифту, щоб не передавати в функцію вставки таблиці форматування
            exp.insertTable(dataGridView1);//вставляємо таблицю
        }

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

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