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 FormAddZak : Form
    {
        public FormAddZak()
        {
            InitializeComponent();
        }
        public string IdZakazchik = FormMain.IDUser;  // код авторизовавшегося заказчика
        string IdTkan = "", IdFur = "", IdIzd = "";  // код выбранной ткани и фурнитуры

        string TxtCon = @"Data Source=213.155.192.79,3002;Initial Catalog=СlothesFactoryLG;Persist Security Info=True;User ID=u21lebed;Password=hgm8";
        class ItemTkani : Panel
        {
            public System.Windows.Forms.Label LblComment;
            public System.Windows.Forms.Label LblLength;
            public System.Windows.Forms.Label LblWith;
            public System.Windows.Forms.Label LblColor;
            public System.Windows.Forms.Label LblTitle;
            public System.Windows.Forms.Label lblID;
            public System.Windows.Forms.PictureBox PbxPhoto;

            public ItemTkani()
            {
                this.LblTitle = new System.Windows.Forms.Label();
                this.LblColor = new System.Windows.Forms.Label();
                this.LblWith = new System.Windows.Forms.Label();
                this.LblLength = new System.Windows.Forms.Label();
                this.LblComment = new System.Windows.Forms.Label();
                this.lblID = new System.Windows.Forms.Label();
                this.PbxPhoto = new System.Windows.Forms.PictureBox();
                // 
                // panel1
                // 
                this.BackColor = System.Drawing.Color.White;
                this.Controls.Add(this.LblComment);
                this.Controls.Add(this.LblLength);
                this.Controls.Add(this.LblWith);
                this.Controls.Add(this.LblColor);
                this.Controls.Add(this.LblTitle);
                this.Controls.Add(this.PbxPhoto);
                this.Location = new System.Drawing.Point(13, 13);
                this.Name = "panel1";
                this.Size = new System.Drawing.Size(390, 161);
                this.TabIndex = 0;
                // 
                // LblTitle
                // 
                this.LblTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
                this.LblTitle.Location = new System.Drawing.Point(225, 13);
                this.LblTitle.Name = "LblTitle";
                this.LblTitle.Size = new System.Drawing.Size(147, 23);
                this.LblTitle.TabIndex = 1;
                this.LblTitle.Text = "label1";
                // 
                // LblColor
                // 
                this.LblColor.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
                this.LblColor.Location = new System.Drawing.Point(225, 41);
                this.LblColor.Name = "LblColor";
                this.LblColor.Size = new System.Drawing.Size(147, 23);
                this.LblColor.TabIndex = 2;
                this.LblColor.Text = "label2";
                // 
                // LblWith
                // 
                this.LblWith.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
                this.LblWith.Location = new System.Drawing.Point(225, 73);
                this.LblWith.Name = "LblWith";
                this.LblWith.Size = new System.Drawing.Size(147, 23);
                this.LblWith.TabIndex = 3;
                this.LblWith.Text = "label3";
                // 
                // LblLength
                // 
                this.LblLength.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
                this.LblLength.Location = new System.Drawing.Point(225, 100);
                this.LblLength.Name = "LblLength";
                this.LblLength.Size = new System.Drawing.Size(147, 23);
                this.LblLength.TabIndex = 4;
                this.LblLength.Text = "label4";
                // 
                // LblComment
                // 
                this.LblComment.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                | System.Windows.Forms.AnchorStyles.Right)));
                this.LblComment.Location = new System.Drawing.Point(225, 126);
                this.LblComment.Name = "LblComment";
                this.LblComment.Size = new System.Drawing.Size(147, 29);
                this.LblComment.TabIndex = 5;
                this.LblComment.Text = "label5";
                // 
                // lblID
                // 
                this.lblID.AutoSize = true;
                this.lblID.Location = new System.Drawing.Point(321, 13);
                this.lblID.Name = "lblID";
                this.lblID.Size = new System.Drawing.Size(34, 16);
                this.lblID.TabIndex = 6;
                this.lblID.Text = "lblID";
                // 
                // pictureBox1
                // 
                this.PbxPhoto.Location = new System.Drawing.Point(16, 13);
                this.PbxPhoto.Name = "pictureBox1";
                this.PbxPhoto.Size = new System.Drawing.Size(175, 129);
                this.PbxPhoto.TabIndex = 0;
                this.PbxPhoto.TabStop = false;
                this.PbxPhoto.SizeMode = PictureBoxSizeMode.Zoom;
            }
        }
        class ItemFurnitura : Panel
        {
            public System.Windows.Forms.Label label2;
            public System.Windows.Forms.Label label1;
            public System.Windows.Forms.Label lblID;
            public System.Windows.Forms.PictureBox PbxImage;
            public ItemFurnitura()
            {
                this.label1 = new System.Windows.Forms.Label();
                this.label2 = new System.Windows.Forms.Label();
                this.lblID = new System.Windows.Forms.Label();
                this.PbxImage = new System.Windows.Forms.PictureBox();
                // 
                // panel1
                // 
                this.BackColor = System.Drawing.Color.White;
                this.Controls.Add(this.label2);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.PbxImage);
                this.Location = new System.Drawing.Point(13, 13);
                this.Name = "panel1";
                this.Size = new System.Drawing.Size(265, 225);
                this.TabIndex = 0;
                // 
                // label1
                // 
                this.label1.Location = new System.Drawing.Point(34, 163);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(190, 23);
                this.label1.TabIndex = 1;
                this.label1.Text = "label1";
                // 
                // label2
                // 
                this.label2.Location = new System.Drawing.Point(34, 190);
                this.label2.Name = "label2";
                this.label2.Size = new System.Drawing.Size(190, 23);
                this.label2.TabIndex = 2;
                this.label2.Text = "label2";
                // 
                // lblID
                // 
                this.lblID.AutoSize = true;
                this.lblID.Location = new System.Drawing.Point(191, 190);
                this.lblID.Name = "lblID";
                this.lblID.Size = new System.Drawing.Size(44, 16);
                this.lblID.TabIndex = 3;
                this.lblID.Text = "label3";
                // 
                // PbxImage
                // 
                this.PbxImage.Location = new System.Drawing.Point(37, 18);
                this.PbxImage.Name = "PbxImage";
                this.PbxImage.Size = new System.Drawing.Size(187, 133);
                this.PbxImage.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
                this.PbxImage.TabIndex = 0;
                this.PbxImage.TabStop = false;
            }
        }

        struct Tkani
        {
            public string Title, Color, With, Length, Comment, Photo, ID;
        }
        struct Furnitura
        {
            public string Title, CountFur, Image, ID;
        }
        List<Tkani> LstTkani = new List<Tkani>();
        ItemTkani CurrentTkan;
        List<Furnitura> LstFurnitura = new List<Furnitura>();
        ItemFurnitura CurrentFurnitura;

        void GetDateFromDBForTkani()
        {
            SqlConnection Con = new SqlConnection(TxtCon);
            Con.Open();
            string TxtQuery =
@"select  Tkan.id_Tkan, Tkan.Title as TitleTkan, Color.Title as TitleColor, Length, Width, Comment, NamePhoto
from Tkan join Color on Tkan.id_color = Color.id_colors";
            SqlCommand Query = new SqlCommand(TxtQuery, Con);
            SqlDataReader Res = Query.ExecuteReader();

            LstTkani.Clear();
            while (Res.Read())
            {
                Tkani tkan = new Tkani();
                tkan.Title = Res["TitleTkan"].ToString();  
                tkan.Color = Res["TitleColor"].ToString();  
                tkan.With = Res["Width"].ToString();  
                tkan.Length = Res["Length"].ToString();  
                tkan.Comment = Res["Comment"].ToString();
                tkan.ID = Res["id_Tkan"].ToString();
                tkan.Photo = Res["NamePhoto"].ToString();
                LstTkani.Add(tkan);
            }
            Con.Close();
        }
        void GetDateFromDBForFurnitura()
        {
            SqlConnection Con = new SqlConnection(TxtCon);
            Con.Open();

            SqlCommand Query = new SqlCommand("select * from Furnitura ", Con);
            SqlDataReader Res = Query.ExecuteReader();

            LstFurnitura.Clear();
            while (Res.Read())
            {
                Furnitura fur = new Furnitura();
                fur.Title = Res["namefur"].ToString();
                fur.CountFur = Res["countfur"].ToString();
                fur.Image = Res["photo"].ToString();
                fur.ID = Res["id_fur"].ToString();
                LstFurnitura.Add(fur);
            }
            Con.Close();
        }
        void FillPanelForFurnitura()
        {
            //очистить панель от старых данных
            TlpFurnitura.Controls.Clear();
            //перебор записей о товарах
            for (int i = 0; i <= LstFurnitura.Count - 1; i++)
            {
                ItemFurnitura Item = new ItemFurnitura();
                Item.label1.Text = "Название: "+LstFurnitura[i].Title;
                Item.label2.Text = "Кол-во на складе: "+LstFurnitura[i].CountFur;
                Item.lblID.Text = LstFurnitura[i].ID;
                try
                {
                    Item.PbxImage.Image = Image.FromFile(Application.StartupPath + "\\furnitur\\" + LstFurnitura[i].Image);
                }
                catch
                {
                    Item.PbxImage.Image = Image.FromFile(Application.StartupPath + "\\furnitur\\picture.png");
                }
                Item.Click += Item_Click;
                Item.label1.Click += Label1_Click;
                Item.label2.Click += Label1_Click;
                Item.PbxImage.Click += Label1_Click;

                if (i == 0)
                {
                    CurrentFurnitura = Item;
                    CurrentFurnitura.BackColor = Color.LightGreen;
                    IdFur = CurrentFurnitura.lblID.Text;
                    TbxNameFur.Text = CurrentFurnitura.label1.Text.Substring(CurrentFurnitura.label1.Text.LastIndexOf(": ") + 2);
                    TbxCountFurSklad.Text = CurrentFurnitura.label2.Text.Substring(CurrentFurnitura.label2.Text.LastIndexOf(": ")+2);
                }
                //добавить плитку в контейнер
                TlpFurnitura.Controls.Add(Item);
            }
        }

        private void Label1_Click(object sender, EventArgs e)
        {
            CurrentFurnitura.BackColor = Color.White;
            CurrentFurnitura = (sender as Control).Parent as ItemFurnitura;
            IdFur = CurrentFurnitura.lblID.Text;
            TbxNameFur.Text = CurrentFurnitura.label1.Text.Substring(CurrentFurnitura.label1.Text.LastIndexOf(": ") + 2);
            TbxCountFurSklad.Text = CurrentFurnitura.label2.Text.Substring(CurrentFurnitura.label2.Text.LastIndexOf(": ") + 2);
            CurrentFurnitura.BackColor = Color.LightGreen;
        }

        private void Item_Click(object sender, EventArgs e)
        {
            CurrentFurnitura.BackColor = Color.White;
            CurrentFurnitura = sender as ItemFurnitura;
            IdFur = CurrentFurnitura.lblID.Text;
            TbxNameFur.Text = CurrentFurnitura.label1.Text.Substring(CurrentFurnitura.label1.Text.LastIndexOf(": ") + 2);
            TbxCountFurSklad.Text = CurrentFurnitura.label2.Text.Substring(CurrentFurnitura.label2.Text.LastIndexOf(": ") + 2);
            CurrentFurnitura.BackColor = Color.LightGreen;
        }

        void FillPanelForTkani()
        {
            //очистить панель от старых данных
            TlpTkani.Controls.Clear();
            //перебор записей о товарах
            for (int i = 0; i <= LstTkani.Count - 1; i++)
            {
                ItemTkani Item = new ItemTkani();
                Item.LblTitle.Text = "Название: " + LstTkani[i].Title;
                Item.LblColor.Text = "Цвет: "+LstTkani[i].Color;
                Item.LblWith.Text = "Ширина: "+LstTkani[i].With;
                Item.LblLength.Text = "Длинна: "+LstTkani[i].Length;
                Item.LblComment.Text = "Описание: "+LstTkani[i].Comment;
                Item.lblID.Text = LstTkani[i].ID;
                try
                {
                    Item.PbxPhoto.Image = Image.FromFile(Application.StartupPath + "\\tkani\\" + LstTkani[i].Photo);
                }
                catch
                {
                    Item.PbxPhoto.Image = Image.FromFile(Application.StartupPath + "\\tkani\\picture.png");
                }
                Item.Click += Item_Click1;
                Item.lblID.Click += LblID_Click;
                Item.LblColor.Click += LblID_Click;
                Item.LblComment.Click += LblID_Click;
                Item.LblLength.Click += LblID_Click;
                Item.LblTitle.Click += LblID_Click;
                Item.LblWith.Click += LblID_Click;
                Item.PbxPhoto.Click += LblID_Click;
                if (i == 0)
                {
                    CurrentTkan = Item;
                    CurrentTkan.BackColor = Color.LightBlue;
                    IdTkan = CurrentTkan.lblID.Text;
                    TbxTitle.Text = CurrentTkan.LblTitle.Text.Substring(CurrentTkan.LblTitle.Text.LastIndexOf(": ") + 2);
                    TbxColor.Text = CurrentTkan.LblColor.Text.Substring(CurrentTkan.LblColor.Text.LastIndexOf(": ") + 2);
                    TbxWith.Text = CurrentTkan.LblWith.Text.Substring(CurrentTkan.LblWith.Text.LastIndexOf(": ") + 2);
                    TbxLength.Text = CurrentTkan.LblLength.Text.Substring(CurrentTkan.LblLength.Text.LastIndexOf(": ") + 2);
                    TbxDescription.Text = CurrentTkan.LblComment.Text.Substring(CurrentTkan.LblComment.Text.LastIndexOf(": ") + 2);
                }
                //добавить плитку в контейнер
                TlpTkani.Controls.Add(Item);
            }
        }

        private void LblID_Click(object sender, EventArgs e)
        {
            CurrentTkan.BackColor = Color.White;
            CurrentTkan = (sender as Control).Parent as ItemTkani;
            IdTkan = CurrentTkan.lblID.Text;
            TbxTitle.Text = CurrentTkan.LblTitle.Text.Substring(CurrentTkan.LblTitle.Text.LastIndexOf(": ") + 2);
            TbxColor.Text = CurrentTkan.LblColor.Text.Substring(CurrentTkan.LblColor.Text.LastIndexOf(": ") + 2);
            TbxWith.Text = CurrentTkan.LblWith.Text.Substring(CurrentTkan.LblWith.Text.LastIndexOf(": ") + 2);
            TbxLength.Text = CurrentTkan.LblLength.Text.Substring(CurrentTkan.LblLength.Text.LastIndexOf(": ") + 2);
            TbxDescription.Text = CurrentTkan.LblComment.Text.Substring(CurrentTkan.LblComment.Text.LastIndexOf(": ") + 2);
            CurrentTkan.BackColor = Color.LightBlue;
        }

        private void Item_Click1(object sender, EventArgs e)
        {
            CurrentTkan.BackColor = Color.White;
            CurrentTkan = sender as ItemTkani;
            IdTkan = CurrentTkan.lblID.Text;
            TbxTitle.Text = CurrentTkan.LblTitle.Text.Substring(CurrentTkan.LblTitle.Text.LastIndexOf(": ") + 2);
            TbxColor.Text = CurrentTkan.LblColor.Text.Substring(CurrentTkan.LblColor.Text.LastIndexOf(": ") + 2);
            TbxWith.Text = CurrentTkan.LblWith.Text.Substring(CurrentTkan.LblWith.Text.LastIndexOf(": ") + 2);
            TbxLength.Text = CurrentTkan.LblLength.Text.Substring(CurrentTkan.LblLength.Text.LastIndexOf(": ") + 2);
            TbxDescription.Text = CurrentTkan.LblComment.Text.Substring(CurrentTkan.LblComment.Text.LastIndexOf(": ") + 2);
            CurrentTkan.BackColor = Color.LightBlue;
        }

        /// <summary>
        /// Определение длины ткани, которую нужно отрезать от рулона
        /// для изготовления нужного кол-ва изделий заданного размера
        /// </summary>
        /// <param name="WidthTkan">ширина рулона ткани</param>
        /// <param name="WidthIzd">ширина изделия</param>
        /// <param name="LengthIzd">длина изделия</param>
        /// <param name="CountIzd">кол-во изделий</param>
        /// <returns>длина ткани, которую нужно отрезать от рулона</returns>
        int CutTkan(int WidthTkan, int WidthIzd, int LengthIzd, int CountIzd)
        {
            // ЕСЛИ УКЛАДЫВАТЬ ИЗДЕЛИЯ НА ТКАНЬ В РУЛОНЕ ПО ШИРИНЕ ИЗДЕЛИЯ
            // кол-во изделий, умещающихся в один ряд на рулоне ткани
            int IzdInRow1 = WidthTkan / WidthIzd;
            // кол-во рядов, в каждом из которых IzdInRow1 изделий
            int Row1 = CountIzd / IzdInRow1;
            // если кол-во изделий в 1 ряду умноженное на кол-во рядов меньше
            // кол-ва всех изделий, добавить кол-во рядов
            if (IzdInRow1 * Row1 < CountIzd)
                Row1++;
            // длина ткани, которую нужно отрезать от рулона, если укладывать изделия
            // по ширине
            int CutTkan1 = LengthIzd * Row1;

            // ЕСЛИ УКЛАДЫВАТЬ ИЗДЕЛИЯ НА ТКАНЬ В РУЛОНЕ ПО ДЛИНЕ ИЗДЕЛИЯ
            // кол-во изделий, умещающихся в один ряд на рулоне ткани
            int IzdInRow2 = WidthTkan / LengthIzd;
            // кол-во рядов, в каждом из которых IzdInRow2 изделий
            int Row2 = CountIzd / IzdInRow2;
            // если перемножить кол-во изделий в 1 ряду на кол-во рядов и полученное
            // значение меньше кол-ва необходимых изделий, значит нужно использовать
            // еще один ряд
            if (IzdInRow2 * Row2 < CountIzd)
                Row2++;
            // длина ткани, которую нужно отрезать от рулона, если укладывать изделия
            // по длине
            int CutTkan2 = WidthIzd * Row2;

            // вернуть наименьшую длину
            return Math.Min(CutTkan1, CutTkan2);
        }

        private void BtnOK_Click(object sender, EventArgs e)
        {
            // int a = CutTkan(430, 150, 200, 4);
            //this.Text = a.ToString();
            //return;

            // кол-во фурнитур, которое нужно сохранить в БД
            if (TbxCountFur.Text.Trim() == "" || TbxCountIzd.Text.Trim() == "")
            {
                MessageBox.Show("Не введено количество фурнитуры или изделий.", "Внимание!",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }
            int NewCountFur = int.Parse(TbxCountFurSklad.Text) -
                int.Parse(TbxCountFur.Text) * int.Parse(TbxCountIzd.Text);
            SqlConnection con = new SqlConnection(TxtCon);
            con.Open();
            string t1 = string.Format(@"update Furnitura set countfur = {0} where id_fur = {1}", NewCountFur, IdFur);
            SqlCommand query = new SqlCommand(t1, con);
            // выполнить запрос
            query.ExecuteNonQuery();
            con.Close();

            int WidthTkan = int.Parse(TbxWith.Text); // ширина ткани
            // ширина изделия
            int WidthIzd = int.Parse(DgvIzd.CurrentRow.Cells[3].Value.ToString());
            // длина изделия
            int LengthIzd = int.Parse(DgvIzd.CurrentRow.Cells[2].Value.ToString());
            int CountIzd = int.Parse(TbxCountIzd.Text); // кол-во изделий
            // отрезать от рулона ткани кусок нужной длины
            int NewLengthTkan = int.Parse(TbxLength.Text) -
                CutTkan(WidthTkan, WidthIzd, LengthIzd, CountIzd);

            // обновить таблицу Ткани (для выделенной ткани сохранить новую длину NewLengthTkan)
            con.Open();
            string t2 = string.Format(@"update Tkan set Length = {0} where id_Tkan = {1}", NewLengthTkan, IdTkan);
            SqlCommand query1 = new SqlCommand(t2, con);
            // выполнить запрос
            query1.ExecuteNonQuery();
            con.Close();

            // код менеджера для обработки нового заказа нужно заменить на код наименее загруженного менеджера
            int IdManager = 2;

            //try
            //{
                con.Open();
                // SQL-запрос для добавления нового заказа
                string t = String.Format(@"insert into Orders (id_izd, id_zak, id_men, id_tkan, id_fur, countfur, countizd) values ({0}, {1}, {2}, {3}, {4}, {5}, {6})",
                    IdIzd, IdZakazchik, IdManager, IdTkan, IdFur, TbxCountFur.Text, TbxCountIzd.Text);
                SqlCommand query2 = new SqlCommand(t, con);
                // выполнить запрос
                query2.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("Заказ сформирован.", "Внимание!",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Close();  // закрыть форму
            //}
            //catch
            //{
            //    MessageBox.Show("Ошибка добавления нового заказа.", "Внимание!",
            //        MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            //}

        }

        private void DgvIzd_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            IdIzd = DgvIzd.CurrentRow.Cells[0].Value.ToString();
        }

        private void FormZakazchik_Load(object sender, EventArgs e)
        {
            // TODO: данная строка кода позволяет загрузить данные в таблицу "сlothesFactoryLGDataSet.Izdelie". При необходимости она может быть перемещена или удалена.
            this.izdelieTableAdapter.Fill(this.сlothesFactoryLGDataSet.Izdelie);
            // TODO: данная строка кода позволяет загрузить данные в таблицу "сlothesFactoryLGDataSet.Users". При необходимости она может быть перемещена или удалена.
            this.usersTableAdapter.Fill(this.сlothesFactoryLGDataSet.Users);
            IdIzd = DgvIzd.CurrentRow.Cells[0].Value.ToString();
            GetDateFromDBForTkani();
            FillPanelForTkani();

            GetDateFromDBForFurnitura();
            FillPanelForFurnitura();
        }

        

    }
}
