using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Word = Microsoft.Office.Interop.Word;

namespace СУБД_Швейная_фабрика
{
    public partial class FormManager : Form
    {
        public FormManager()
        {
            InitializeComponent();
        }

        void FillListZakaz()
        {
            SqlConnection con = new SqlConnection(Properties.Settings.Default.FabricDeryugoConnectionString);
            con.Open();
            string TxtQuery =
@"select Izdeliya.nameizd as izd, 
    Zakaz.countizd as countizd, 
    Tkani.nametkan as tkan, 
    Furnitura.namefur as fur, 
    Zakaz.countfur as countfur, 
    Users.fam as zakazchik
from Zakaz, Users, Tkani, Furnitura, Izdeliya
where Users.iduser = Zakaz.idzakazchik 
    and Tkani.idtkan = Zakaz.idtkan 
    and Furnitura.idfur = Zakaz.idfur 
    and Izdeliya.idizd = Zakaz.idizd
    and Zakaz.idman = " + LblIdManager.Text;

            SqlCommand query1 = new SqlCommand(TxtQuery, con);
            // выполнить запрос
            SqlDataReader SqlRez = query1.ExecuteReader();

            DgvZakaz.Rows.Clear(); // очистить от старых строк
            // перебирать результаты запроса
            while (SqlRez.Read())
            {
                DgvZakaz.Rows.Add(SqlRez["izd"], SqlRez["countizd"],
                    SqlRez["tkan"], SqlRez["fur"], SqlRez["countfur"],
                    SqlRez["zakazchik"]);
            }
            con.Close();
        }

        public struct Tkani
        {
            public string IdTkan, NameTkan, ColorTkan, Width, Length, Description;
            public Image PhotoTkan;
        }

        List<Tkani> LstTkani = new List<Tkani>();

        void GetTkaniFromDB()
        {
            SqlConnection con = new SqlConnection(Properties.Settings.Default.FabricDeryugoConnectionString);
            con.Open();
            SqlCommand Query = new SqlCommand("select * from Tkani where length > 0", con);
            SqlDataReader Data = Query.ExecuteReader();
            while (Data.Read())
            {
                Tkani Tk = new Tkani();
                Tk.IdTkan = Data["idtkan"].ToString();
                Tk.NameTkan = Data["nametkan"].ToString();
                Tk.ColorTkan = Data["color"].ToString();
                Tk.Width = Data["width"].ToString();
                Tk.Length = Data["length"].ToString();
                Tk.Description = Data["description"].ToString();
                try
                {
                    // загрузить из таблицы БД байты фотографии в массив
                    byte[] PhotoByte = (byte[])Data["phototkan"];
                    ImageConverter ImConverter = new ImageConverter();
                    // сконвертировать массив байт в изображение
                    Tk.PhotoTkan = (Bitmap)ImConverter.ConvertFrom(PhotoByte);
                }
                catch
                {
                    // в случае ошибки загрузить пустое изображение из ресурсов
                    Tk.PhotoTkan = Properties.Resources.tmp;
                }
                LstTkani.Add(Tk);  // добавить в список новую ткань
            }
            con.Close();
        }

        void FillLVTkani()
        {
            LVTkani.Items.Clear();
            ImageListTkani.Images.Clear();
            foreach (Tkani Tk in LstTkani)
            {
                // новый элемент для ListView с названием ткани
                ListViewItem LV = new ListViewItem(Tk.NameTkan);
                // в ImageList добавить изображение ткани
                ImageListTkani.Images.Add(Tk.PhotoTkan);
                // связать последнее добавленное изображение с новым элементом ListView
                LV.ImageIndex = ImageListTkani.Images.Count - 1;
                LVTkani.Items.Add(LV);  // добавить новый элемент к ListView
            }
        }

        public struct Furnitura
        {
            public string IdFur, NameFur, CountFur;
            public Image PhotoFur;
        }

        List<Furnitura> LstFurnitura = new List<Furnitura>();

        void GetFurnituraFromDB()
        {
            SqlConnection con = new SqlConnection(Properties.Settings.Default.FabricDeryugoConnectionString);
            con.Open();
            SqlCommand Query = new SqlCommand("select * from Furnitura where countfur > 0", con);
            SqlDataReader Data = Query.ExecuteReader();
            while (Data.Read())
            {
                Furnitura Fr = new Furnitura();
                Fr.IdFur = Data["idfur"].ToString();
                Fr.NameFur = Data["namefur"].ToString();
                Fr.CountFur = Data["countfur"].ToString();
                try
                {
                    // загрузить из таблицы БД байты фотографии в массив
                    byte[] PhotoByte = (byte[])Data["photo"];
                    ImageConverter ImConverter = new ImageConverter();
                    // сконвертировать массив байт в изображение
                    Fr.PhotoFur = (Bitmap)ImConverter.ConvertFrom(PhotoByte);
                }
                catch
                {
                    // в случае ошибки загрузить пустое изображение из ресурсов
                    Fr.PhotoFur = Properties.Resources.tmp;
                }
                LstFurnitura.Add(Fr);  // добавить в список новую фурнитуру
            }
            con.Close();
        }

        void FillLVFurnitura()
        {
            LVFurnitura.Items.Clear();
            ImageListFur.Images.Clear();
            foreach (Furnitura Fr in LstFurnitura)
            {
                // новый элемент для ListView с названием фурнитуры
                ListViewItem LV = new ListViewItem(Fr.NameFur);
                // в ImageList добавить изображение фурнитуры
                ImageListFur.Images.Add(Fr.PhotoFur);
                // связать последнее добавленное изображение с новым элементом ListView
                LV.ImageIndex = ImageListFur.Images.Count - 1;
                LVFurnitura.Items.Add(LV);  // добавить новый элемент к ListView
            }
        }

        private void FormManager_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'fabricDeryugoDataSet.Users' table. You can move, or remove it, as needed.
            this.usersTableAdapter.Fill(this.fabricDeryugoDataSet.Users);
            // TODO: This line of code loads data into the 'fabricDeryugoDataSet.Izdeliya' table. You can move, or remove it, as needed.
            this.izdeliyaTableAdapter.Fill(this.fabricDeryugoDataSet.Izdeliya);
            FillListZakaz();

            GetTkaniFromDB();
            FillLVTkani();
            GetFurnituraFromDB();
            FillLVFurnitura();
        }

        private void BtnProfile_Click(object sender, EventArgs e)
        {
            FormProfil frm = new FormProfil();
            frm.usersBindingSource.Filter = this.usersBindingSource.Filter;
            if (frm.ShowDialog() == DialogResult.OK)
            {
                this.usersTableAdapter.Fill(this.fabricDeryugoDataSet.Users);
            }
        }

        private void LVFurnitura_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (LVFurnitura.SelectedItems.Count > 0)  // есть выделенные элементы
            {
                int num = LVFurnitura.SelectedIndices[0];  // номер выделенного элемента
                TbxNameFur.Text = LstFurnitura[num].NameFur;
                TbxCountFurSklad.Text = LstFurnitura[num].CountFur;
            }
            else  // нет выделенных элементов
            {
                TbxNameFur.Text = "";
                TbxCountFurSklad.Text = "";
            }
        }

        private void BtnAdd_Click(object sender, EventArgs e)
        {
            izdeliyaBindingSource.AddNew();
            BtnSave.Enabled = true;
            BtnAdd.Enabled = false;
            BtnEdit.Enabled = false;
            DgvIzd.Enabled = false;
            TbxNameIzd.Enabled = true;
            TbxLengthIzd.Enabled = true;
            TbxWidthIzd.Enabled = true;
        }

        private void BtnEdit_Click(object sender, EventArgs e)
        {
            BtnSave.Enabled = true;
            BtnAdd.Enabled = false;
            BtnEdit.Enabled = false;
            DgvIzd.Enabled = false;
            TbxNameIzd.Enabled = true;
            TbxLengthIzd.Enabled = true;
            TbxWidthIzd.Enabled = true;
        }

        private void BtnSave_Click(object sender, EventArgs e)
        {
            izdeliyaBindingSource.EndEdit();
            this.izdeliyaTableAdapter.Update(this.fabricDeryugoDataSet.Izdeliya);
            BtnSave.Enabled = false;
            BtnAdd.Enabled = true;
            BtnEdit.Enabled = true;
            DgvIzd.Enabled = true;
            TbxNameIzd.Enabled = false;
            TbxLengthIzd.Enabled = false;
            TbxWidthIzd.Enabled = false;
        }

        private void BtnAll_Click(object sender, EventArgs e)
        {
            if (RbtWord.Checked)
            {
                Word.Application app = new Word.Application();
                app.Visible = true;
                Word.Document doc = app.Documents.Open(Application.StartupPath + "\\Заказы.docx", null, true);

                Word.Bookmarks WBmark = doc.Bookmarks;  // закладки из документа
                WBmark["man"].Range.Text = FamLabel.Text + " " + NameLabel.Text + " " + OtchLabel.Text;

                string num = "", izd = "", countizd = "", tkan = "",
                    fur = "", countfur = "", zakazchik = "";
                for (int i = 0; i <= DgvZakaz.RowCount - 1; i++)  // перебор записей в таблице
                {
                    num += (i + 1).ToString() + "." + "\r\n";
                    izd += DgvZakaz.Rows[i].Cells[0].Value + "\r\n";
                    countizd += DgvZakaz.Rows[i].Cells[1].Value + "\r\n";
                    tkan += DgvZakaz.Rows[i].Cells[2].Value + "\r\n";
                    fur += DgvZakaz.Rows[i].Cells[3].Value + "\r\n";
                    countfur += DgvZakaz.Rows[i].Cells[4].Value + "\r\n";
                    zakazchik += DgvZakaz.Rows[i].Cells[5].Value + "\r\n";
                }
                WBmark["num"].Range.Text = num.Trim();
                WBmark["izd"].Range.Text = izd.Trim();
                WBmark["countizd"].Range.Text = countizd.Trim();
                WBmark["tkan"].Range.Text = tkan.Trim();
                WBmark["fur"].Range.Text = fur.Trim();
                WBmark["countfur"].Range.Text = countfur.Trim();
                WBmark["zak"].Range.Text = zakazchik.Trim();
            }
            else
            {
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    StreamWriter f = new StreamWriter(saveFileDialog1.FileName);
                    string t = "izd;countizd;tkan;furnitura;countfur;zakazchik";
                    f.WriteLine(t);

                    for (int i = 0; i <= DgvZakaz.RowCount - 1; i++)
                    {
                        t = "";
                        t += DgvZakaz.Rows[i].Cells[0].Value + ";";
                        t += DgvZakaz.Rows[i].Cells[1].Value + ";";
                        t += DgvZakaz.Rows[i].Cells[2].Value + ";";
                        t += DgvZakaz.Rows[i].Cells[3].Value + ";";
                        t += DgvZakaz.Rows[i].Cells[4].Value + ";";
                        t += DgvZakaz.Rows[i].Cells[5].Value;
                        f.WriteLine(t);
                    }
                    f.Close();
                }
            }
        }

        private void BtnSelect_Click(object sender, EventArgs e)
        {
            if (RbtWord.Checked)
            {
                Word.Application app = new Word.Application();
                app.Visible = true;
                Word.Document doc = app.Documents.Open(Application.StartupPath + "\\Заказы.docx", null, true);

                Word.Bookmarks WBmark = doc.Bookmarks;  // закладки из документа
                WBmark["man"].Range.Text = FamLabel.Text + " " + NameLabel.Text + " " + OtchLabel.Text;

                string num = "", izd = "", countizd = "", tkan = "",
                    fur = "", countfur = "", zakazchik = "";
                for (int i = 0; i <= DgvZakaz.SelectedRows.Count - 1; i++)  // перебор записей в таблице
                {
                    num += (i + 1).ToString() + "." + "\r\n";
                    izd += DgvZakaz.SelectedRows[i].Cells[0].Value + "\r\n";
                    countizd += DgvZakaz.SelectedRows[i].Cells[1].Value + "\r\n";
                    tkan += DgvZakaz.SelectedRows[i].Cells[2].Value + "\r\n";
                    fur += DgvZakaz.SelectedRows[i].Cells[3].Value + "\r\n";
                    countfur += DgvZakaz.SelectedRows[i].Cells[4].Value + "\r\n";
                    zakazchik += DgvZakaz.SelectedRows[i].Cells[5].Value + "\r\n";
                }
                WBmark["num"].Range.Text = num.Trim();
                WBmark["izd"].Range.Text = izd.Trim();
                WBmark["countizd"].Range.Text = countizd.Trim();
                WBmark["tkan"].Range.Text = tkan.Trim();
                WBmark["fur"].Range.Text = fur.Trim();
                WBmark["countfur"].Range.Text = countfur.Trim();
                WBmark["zak"].Range.Text = zakazchik.Trim();
            }
            else
            {
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    StreamWriter f = new StreamWriter(saveFileDialog1.FileName);
                    string t = "izd;countizd;tkan;furnitura;countfur;zakazchik";
                    f.WriteLine(t);

                    for (int i = 0; i <= DgvZakaz.SelectedRows.Count - 1; i++)
                    {
                        t = "";
                        t += DgvZakaz.SelectedRows[i].Cells[0].Value + ";";
                        t += DgvZakaz.SelectedRows[i].Cells[1].Value + ";";
                        t += DgvZakaz.SelectedRows[i].Cells[2].Value + ";";
                        t += DgvZakaz.SelectedRows[i].Cells[3].Value + ";";
                        t += DgvZakaz.SelectedRows[i].Cells[4].Value + ";";
                        t += DgvZakaz.SelectedRows[i].Cells[5].Value;
                        f.WriteLine(t);
                    }
                    f.Close();
                }
            }
        }

        private void izdeliyaBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            this.Validate();
            this.izdeliyaBindingSource.EndEdit();
            this.tableAdapterManager.UpdateAll(this.fabricDeryugoDataSet);

        }
    }
}
