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 sport_invent_modul_14._05
{
    public partial class Add_Form : Form
    {

        public event EventHandler ProductAdded;
        public Add_Form()
        {
            InitializeComponent();
            LoadReferenceData();
        }

        private void LoadReferenceData()
            {
                try
                {
                    var db = DB.getInstance();
                    db.OpenConnection();
                    var conn = db.getConnection();

                    // Загрузка поставщиков
                    var suppliers = new DataTable();
                    new MySqlDataAdapter("SELECT idSupplier, Supplier FROM Supplier", conn).Fill(suppliers);
                    comboBox3.DataSource = suppliers;
                    comboBox3.DisplayMember = "Supplier";
                    comboBox3.ValueMember = "idSupplier";

                    // Загрузка категорий
                    var categories = new DataTable();
                    new MySqlDataAdapter("SELECT idCategory, Category FROM Category", conn).Fill(categories);
                    comboBox1.DataSource = categories;
                    comboBox1.DisplayMember = "Category";
                    comboBox1.ValueMember = "idCategory";

                    // Загрузка производителей
                    var manufacturers = new DataTable();
                    new MySqlDataAdapter("SELECT idManufacturer, Manufacturer FROM Manufacturer", conn).Fill(manufacturers);
                    comboBox2.DataSource = manufacturers;
                    comboBox2.DisplayMember = "Manufacturer";
                    comboBox2.ValueMember = "idManufacturer";

                    var unit = new DataTable();
                    new MySqlDataAdapter("SELECT idEdinica, Edinica FROM Edinica", conn).Fill(unit);
                    comboBox4.DataSource = unit;
                    comboBox4.DisplayMember = "Edinica";
                    comboBox4.ValueMember = "idEdinica";
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Ошибка при загрузке справочных данных: " + ex.Message);
                }
            }

            private void button1_Click(object sender, EventArgs e)
            {
                
            }

        private void Add_Form_Load(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {

        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            {
                try
                {
                    // Проверка обязательных полей
                    if (string.IsNullOrWhiteSpace(textBox1.Text) ||
                        string.IsNullOrWhiteSpace(textBox2.Text) ||
                        string.IsNullOrWhiteSpace(textBox4.Text) ||
                        //string.IsNullOrWhiteSpace(textBox9.Text) ||
                        comboBox1.SelectedValue == null ||
                        comboBox3.SelectedValue == null ||
                        comboBox4.SelectedValue == null ||
                        comboBox2.SelectedValue == null)
                    {
                        MessageBox.Show("Пожалуйста, заполните все обязательные поля!", "Ошибка",
                            MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }

                    // Валидация числовых полей

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

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

                    int discount = string.IsNullOrWhiteSpace(textBox5.Text) ? 0 :
                        int.TryParse(textBox5.Text, out int disc) ? disc : 0;

                    if (discount < 0 || discount > 100)
                    {
                        MessageBox.Show("Скидка должна быть в диапазоне от 0 до 100%!", "Ошибка",
                            MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }

                    var db = DB.getInstance();
                    db.OpenConnection();
                    var conn = db.getConnection();

                    int productNameId;

                    // Добавление товара
                    string insertProductQuery = @"INSERT INTO Product (
                            Article, Name, CategoryID, Description, ManufacturerID
                            SupplierID, Price, Discount,
                            Quantity, EdinicaID, Photo
                        ) VALUES (
                            @Article, @Name, CategoryID, @Description,
                            @ManufacturerID, @SupplierID, @Price, @Discount,
                            @Quantity, @EdinicaID, @Photo
                        )";

                    using (var cmd = new MySqlCommand(insertProductQuery, conn))
                    {
                        cmd.Parameters.AddWithValue("@Article", textBox1.Text);
                        cmd.Parameters.AddWithValue("@Name", textBox2.Text);
                        cmd.Parameters.AddWithValue("@CategoryID", comboBox1.SelectedValue);
                        cmd.Parameters.AddWithValue("@Description", textBox3.Text?.Trim() ?? "");
                        cmd.Parameters.AddWithValue("@ManufacturerID", comboBox2.SelectedValue);
                        cmd.Parameters.AddWithValue("@SupplierID", comboBox3.SelectedValue);
                        cmd.Parameters.AddWithValue("@Price", price);
                        cmd.Parameters.AddWithValue("@Discount", discount);
                        cmd.Parameters.AddWithValue("@Quantity", quantity);
                        cmd.Parameters.AddWithValue("@UnitID", comboBox4.SelectedValue);

                        cmd.Parameters.AddWithValue("@Photo", "");

                        if (cmd.ExecuteNonQuery() > 0)
                        {
                            MessageBox.Show("Товар успешно добавлен!", "Успех",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                            ProductAdded?.Invoke(this, EventArgs.Empty);
                            this.Close();
                        }
                        else
                        {
                            MessageBox.Show("Не удалось добавить товар!", "Ошибка",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
                catch (MySqlException ex) when (ex.Number == 1062)
                {
                    MessageBox.Show("Товар с таким артикулом уже существует!", "Ошибка",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                catch (MySqlException ex)
                {
                    MessageBox.Show($"Ошибка базы данных: {ex.Message}", "Ошибка",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Ошибка при добавлении товара: {ex.Message}", "Ошибка",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }
}
