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

namespace СУБД_Швейная_фабрика
{
    public partial class FormKladov : Form
    {
        public FormKladov()
        {
            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, 
	UsersMan.fam as manager, UsersZak.fam as zakazchik 
from Zakaz, Users as UsersMan, Users as UsersZak, 
	Tkani, Furnitura, Izdeliya
where 
	UsersMan.iduser = Zakaz.idman 
	and UsersZak.iduser = Zakaz.idzakazchik 
	and Tkani.idtkan = Zakaz.idtkan 
	and Furnitura.idfur = Zakaz.idfur 
	and Izdeliya.idizd = Zakaz.idizd";

            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["manager"], 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 FormKladov_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);
            FillListZakaz();

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

        private void LVTkani_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (LVTkani.SelectedItems.Count > 0)  // есть выделенные элементы
            {
                int num = LVTkani.SelectedIndices[0];  // номер выделенного элемента
                NametkanTextBox.Text = LstTkani[num].NameTkan;
                ColorTextBox.Text = LstTkani[num].ColorTkan;
                WidthTextBox.Text = LstTkani[num].Width;
                LengthTextBox.Text = LstTkani[num].Length;
                DescriptionTextBox.Text = LstTkani[num].Description;
            }
            else  // нет выделенных элементов
            {
                NametkanTextBox.Text = "";
                ColorTextBox.Text = "";
                WidthTextBox.Text = "";
                LengthTextBox.Text = "";
                DescriptionTextBox.Text = "";
            }
        }

        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 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 BtnGetMaterial_Click(object sender, EventArgs e)
        {
            FormGetMaterial frm = new FormGetMaterial();
            frm.ShowDialog();
        }

        private void BtnSpisMaterial_Click(object sender, EventArgs e)
        {
            FormSpisokMaterial frm = new FormSpisokMaterial();
            frm.ShowDialog();
        }

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

        }
    }
}
