using System;
using System.Data;
using System.Windows.Forms;
using System.Xml.Linq;
using MySql.Data.MySqlClient;

namespace _0303RogovaNeshina
{
    public partial class EditBooksForm : Form
    {
        string connStr = "Server=cfif31.ru;Port=3306;Database=ISPr25-21_NeshinaPV_0303;Uid=ISPr25-21_NeshinaPV;Pwd=ISPr25-21_NeshinaPV;";
        private int bookId; // ID книги, которую редактируем

        // Конструктор принимает ID книги
        public EditBooksForm(int id)
        {
            InitializeComponent();
            this.bookId = id;
            LoadAuthors();      // Загружаем список авторов
            LoadBookData();     // Загружаем данные конкретной книги
        }

        // Загрузка авторов в ComboBox (так же, как в AddForm)
        private void LoadAuthors()
        {
            try
            {
                using (MySqlConnection conn = new MySqlConnection(connStr))
                {
                    conn.Open();
                    string sql = "SELECT idauthor, name FROM author ORDER BY name";

                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                    DataTable dt = new DataTable();
                    da.Fill(dt);

                    cbAuthor.DataSource = dt;
                    cbAuthor.DisplayMember = "name";
                    cbAuthor.ValueMember = "idauthor";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка загрузки авторов: " + ex.Message);
            }
        }

        // Загрузка данных книги в поля формы
        private void LoadBookData()
        {
            try
            {
                using (MySqlConnection conn = new MySqlConnection(connStr))
                {
                    conn.Open();
                    string sql = "SELECT name, author_id, price FROM books WHERE idbooks = @id";

                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    cmd.Parameters.AddWithValue("@id", bookId);

                    MySqlDataReader reader = cmd.ExecuteReader();

                    if (reader.Read())
                    {
                        tbName.Text = reader["name"].ToString();
                        cbAuthor.SelectedValue = reader["author_id"]; // Выбираем нужного автора
                        tbPrice.Text = reader["price"].ToString();
                    }
                    else
                    {
                        MessageBox.Show("Книга не найдена!");
                        this.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка загрузки данных книги: " + ex.Message);
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            // Проверки (как в AddForm)
            if (string.IsNullOrWhiteSpace(tbName.Text))
            {
                MessageBox.Show("Введите название книги!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            if (cbAuthor.SelectedValue == null)
            {
                MessageBox.Show("Выберите автора!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

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

            try
            {
                using (MySqlConnection conn = new MySqlConnection(connStr))
                {
                    conn.Open();

                    // UPDATE запрос вместо INSERT
                    string sql = "UPDATE books SET name = @name, author_id = @author_id, price = @price WHERE idbooks = @id";
                    MySqlCommand cmd = new MySqlCommand(sql, conn);

                    cmd.Parameters.AddWithValue("@name", tbName.Text.Trim());
                    cmd.Parameters.AddWithValue("@author_id", cbAuthor.SelectedValue);
                    cmd.Parameters.AddWithValue("@price", price);
                    cmd.Parameters.AddWithValue("@id", bookId); // Важно: обновляем именно эту книгу

                    int rows = cmd.ExecuteNonQuery();

                    if (rows > 0)
                    {
                        MessageBox.Show("Данные успешно обновлены!", "Успех", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                    }
                    else
                    {
                        MessageBox.Show("Не удалось обновить данные.", "Ошибка");
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка при сохранении: " + ex.Message, "Критическая ошибка");
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }
    }
}