using System;
using System.Data;
using System.Windows.Forms;
using MuseumWinForms;
using Npgsql;

namespace MuseumWinForms
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            LoadData();
            LoadCreators();
        }

        private void LoadData()
        {
            try
            {
                DataTable dt = ExhibitRepository.GetAllExhibits();
                dgvExhibits.DataSource = dt;
                dgvExhibits.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка загрузки: {ex.Message}");
            }
        }

        private void LoadCreators()
        {
            try
            {
                DataTable dt = DatabaseHelper.GetAllCreators();
                cmbCreator.DisplayMember = "full_name";
                cmbCreator.ValueMember = "id_creator";
                cmbCreator.DataSource = dt;
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка загрузки авторов: {ex.Message}");
            }
        }

        private void btnRefresh_Click(object sender, EventArgs e)
        {
            LoadData();
            lblResult.Text = "Данные обновлены";
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            try
            {
                int id = int.Parse(txtId.Text);
                string type = txtType.Text;
                DateTime date = dtpDate.Value;
                decimal price = decimal.Parse(txtPrice.Text);
                decimal cost = decimal.Parse(txtCost.Text);
                int creatorId = (int)cmbCreator.SelectedValue;
                int museumId = int.Parse(txtMuseumId.Text);

                ExhibitRepository.AddExhibit(id, type, date, price, cost, creatorId, museumId);
                LoadData();
                ClearInputs();
                lblResult.Text = "Экспонат добавлен!";
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка добавления: {ex.Message}");
            }
        }

        // ИСПРАВЛЕНО: без Microsoft.VisualBasic
        private void btnUpdate_Click(object sender, EventArgs e)
        {
            if (dgvExhibits.CurrentRow == null)
            {
                MessageBox.Show("Выберите экспонат для изменения");
                return;
            }

            try
            {
                int exhibitId = Convert.ToInt32(dgvExhibits.CurrentRow.Cells["ID"].Value);

                // Используем свою форму InputBox вместо Microsoft.VisualBasic.Interaction.InputBox
                string newPriceStr = InputBox.Show("Введите новую цену:", "Изменение цены", "");

                if (!string.IsNullOrEmpty(newPriceStr) && decimal.TryParse(newPriceStr, out decimal newPrice))
                {
                    ExhibitRepository.UpdateExhibitPrice(exhibitId, newPrice);
                    LoadData();
                    lblResult.Text = "Цена обновлена!";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка изменения: {ex.Message}");
            }
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (dgvExhibits.CurrentRow == null)
            {
                MessageBox.Show("Выберите экспонат для удаления");
                return;
            }

            DialogResult result = MessageBox.Show("Удалить выбранный экспонат?", "Подтверждение",
                MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.Yes)
            {
                try
                {
                    int exhibitId = Convert.ToInt32(dgvExhibits.CurrentRow.Cells["ID"].Value);
                    ExhibitRepository.DeleteExhibit(exhibitId);
                    LoadData();
                    lblResult.Text = "Экспонат удален!";
                }
                catch (Exception ex)
                {
                    MessageBox.Show($"Ошибка удаления: {ex.Message}");
                }
            }
        }

        // ИСПРАВЛЕНО: без Microsoft.VisualBasic
        private void btnTestProcedure_Click(object sender, EventArgs e)
        {
            try
            {
                string authorIdStr = InputBox.Show("Введите ID автора:", "Тест хранимой процедуры", "1");

                if (!string.IsNullOrEmpty(authorIdStr) && int.TryParse(authorIdStr, out int authorId))
                {
                    int count = DatabaseHelper.GetExhibitCountByAuthor(authorId);
                    lblResult.Text = $"Автор с ID {authorId} создал {count} экспонатов";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка: {ex.Message}");
            }
        }

        private void ClearInputs()
        {
            txtId.Text = "";
            txtType.Text = "";
            txtPrice.Text = "";
            txtCost.Text = "";
            txtMuseumId.Text = "";
            dtpDate.Value = DateTime.Now;
            if (cmbCreator.Items.Count > 0)
                cmbCreator.SelectedIndex = 0;
        }

        private void dgvExhibits_SelectionChanged(object sender, EventArgs e)
        {
            // Опционально
        }
    }
}