using MySql.Data.MySqlClient;
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;

namespace NeshinaDem3
{
    public partial class Add : Form
    {
        public Add()
        {
            InitializeComponent();
            LoadTypes();
            LoadUnits();
        }

        private void btnSave_Click(object sender, EventArgs e) //ДОБАВЛЕНИЕ
        {
            if (string.IsNullOrWhiteSpace(txtName.Text))
            {
                MessageBox.Show("Введите название материала.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtName.Focus();
                return;
            }

            if (cmbType.SelectedItem == null)
            {
                MessageBox.Show("Выберите тип материала.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cmbType.Focus();
                return;
            }

            if (!decimal.TryParse(txtPrice.Text, out decimal price) || price < 0)
            {
                MessageBox.Show("Введите корректную цену (неотрицательное число).", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtPrice.Focus();
                return;
            }

            if (!int.TryParse(txtQuantity.Text, out int quantity) || quantity < 0)
            {
                MessageBox.Show("Введите корректное количество (неотрицательное целое число).", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtQuantity.Focus();
                return;
            }

            if (!int.TryParse(txtMinQuantity.Text, out int minQty) || minQty < 0)
            {
                MessageBox.Show("Введите корректное минимальное количество.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtMinQuantity.Focus();
                return;
            }

            if (!int.TryParse(txtStockQuantity.Text, out int stockQty) || stockQty < 0)
            {
                MessageBox.Show("Введите корректное количество на складе.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtStockQuantity.Focus();
                return;
            }

            if (cmbUnit.SelectedItem == null)
            {
                MessageBox.Show("Выберите единицу измерения.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                cmbUnit.Focus();
                return;
            }

            var typeItem = (ComboItem)cmbType.SelectedItem;
            var unitItem = (ComboItem)cmbUnit.SelectedItem;
            //ЗАПРОС
            string insertQuery = @"
        INSERT INTO Materials (Name, Type, Price, Quantity, MinQuantity, QuantityPack, Unit)
        VALUES (@name, @type, @price, @quantity, @minQty, @stockQty, @unit)";

            var conn = DB.GetInstance().GetConnection();
            if (conn.State == ConnectionState.Closed)
                conn.Open();

            using (var cmd = new MySqlCommand(insertQuery, conn))
            {
                cmd.Parameters.AddWithValue("@name", txtName.Text.Trim());
                cmd.Parameters.AddWithValue("@type", typeItem.Id);
                cmd.Parameters.AddWithValue("@price", price);
                cmd.Parameters.AddWithValue("@quantity", quantity);
                cmd.Parameters.AddWithValue("@minQty", minQty);
                cmd.Parameters.AddWithValue("@stockQty", stockQty);
                cmd.Parameters.AddWithValue("@unit", unitItem.Id);

                try
                {
                    cmd.ExecuteNonQuery();
                    MessageBox.Show("Материал успешно добавлен!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Ошибка при добавлении: {ex.Message}", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void LoadTypes() //ЗАГРУЗКА ТИПОВ МАТЕРИАЛОВ
        {
            string query = "SELECT idTypeMaterial, Name FROM TypeMaterial";
            var conn = DB.GetInstance().GetConnection();
            if (conn.State == ConnectionState.Closed)
                conn.Open();

            using (var cmd = new MySqlCommand(query, conn))
            {
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        cmbType.Items.Add(new ComboItem
                        {
                            Id = reader.GetInt32("idTypeMaterial"),
                            Name = reader.GetString("Name")
                        });
                    }
                }
            }
        }

        private void LoadUnits()  //ЗАГРУЗКА ЕДИНИЦ
        {
            string query = "SELECT idUnit, Name FROM Unit";
            var conn = DB.GetInstance().GetConnection();
            if (conn.State == ConnectionState.Closed)
                conn.Open();

            using (var cmd = new MySqlCommand(query, conn))
            {
                using (var reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        cmbUnit.Items.Add(new ComboItem
                        {
                            Id = reader.GetInt32("idUnit"),
                            Name = reader.GetString("Name")
                        });
                    }
                }
            }
        }

        public class ComboItem  //НУЖНО ПРОСТО
        {
            public int Id { get; set; }
            public string Name { get; set; }

            public override string ToString()
            {
                return Name;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
        }
    }
}
