using System;
using System.Drawing;
using System.Drawing.Printing;
using System.IO;
using System.Windows.Forms;

namespace Neshina1703
{
    public partial class QRCodeViewerForm : Form
    {
        private int medicationId;
        private string qrCodePath;

        public QRCodeViewerForm(int medicationId)
        {
            InitializeComponent();
            this.medicationId = medicationId;
        }

        private void QRCodeViewerForm_Load(object sender, EventArgs e)
        {
            LoadQRCode();
        }

        private void LoadQRCode()
        {
            // Получить путь к QR-коду из БД
            var query = "SELECT qr_code_path, medication_name FROM medications WHERE id = @id";
            var parameters = new MySql.Data.MySqlClient.MySqlParameter[]
            {
                new MySql.Data.MySqlClient.MySqlParameter("@id", medicationId)
            };

            var table = DB.ExecuteQuery(query, parameters);

            if (table.Rows.Count > 0)
            {
                string name = table.Rows[0]["medication_name"].ToString();
                qrCodePath = table.Rows[0]["qr_code_path"]?.ToString();

                this.Text = $"QR-код: {name}";

                if (!string.IsNullOrEmpty(qrCodePath) && File.Exists(qrCodePath))
                {
                    pictureBoxQR.Image = Image.FromFile(qrCodePath);
                }
                else
                {
                    // Сгенерировать если не существует
                    qrCodePath = QRCodeHelper.GenerateQRCodeForMedication(medicationId, name);
                    if (!string.IsNullOrEmpty(qrCodePath))
                        pictureBoxQR.Image = Image.FromFile(qrCodePath);
                }
            }
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            if (pictureBoxQR.Image != null)
            {
                PrintDocument printDoc = new PrintDocument();
                printDoc.PrintPage += (s, ev) =>
                {
                    ev.Graphics.DrawImage(pictureBoxQR.Image,
                        new Rectangle(100, 100, 400, 400));
                };

                PrintDialog printDialog = new PrintDialog();
                printDialog.Document = printDoc;

                if (printDialog.ShowDialog() == DialogResult.OK)
                    printDoc.Print();
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            if (pictureBoxQR.Image != null)
            {
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "PNG Images|*.png|JPEG Images|*.jpg";
                saveDialog.Title = "Сохранить QR-код";

                if (saveDialog.ShowDialog() == DialogResult.OK)
                {
                    pictureBoxQR.Image.Save(saveDialog.FileName);
                    MessageBox.Show("QR-код сохранен!", "Успех",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void btnGenerateNew_Click(object sender, EventArgs e)
        {
            var query = "SELECT medication_name FROM medications WHERE id = @id";
            var parameters = new MySql.Data.MySqlClient.MySqlParameter[]
            {
                new MySql.Data.MySqlClient.MySqlParameter("@id", medicationId)
            };

            var table = DB.ExecuteQuery(query, parameters);
            if (table.Rows.Count > 0)
            {
                string name = table.Rows[0]["medication_name"].ToString();
                qrCodePath = QRCodeHelper.GenerateQRCodeForMedication(medicationId, name);

                if (!string.IsNullOrEmpty(qrCodePath))
                {
                    pictureBoxQR.Image = Image.FromFile(qrCodePath);
                    MessageBox.Show("QR-код перегенерирован!", "Успех",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}