using System;
using System.Windows.Forms;
using RestaurantApp.DAL;

namespace RestaurantApp
{
    public partial class ReportForm : Form
    {
        private ReportRepository repo = new ReportRepository();

        public ReportForm()
        {
            InitializeComponent();

            // Устанавливаем даты по умолчанию
            dtpRevenueFrom.Value = DateTime.Now.AddMonths(-1);
            dtpRevenueTo.Value = DateTime.Now;
            dtpDishSalesFrom.Value = DateTime.Now.AddMonths(-1);
            dtpDishSalesTo.Value = DateTime.Now;
            dtpWaiterStatsFrom.Value = DateTime.Now.AddMonths(-1);
            dtpWaiterStatsTo.Value = DateTime.Now;
            dtpPaymentMethodsFrom.Value = DateTime.Now.AddMonths(-1);
            dtpPaymentMethodsTo.Value = DateTime.Now;

            // Подписываем события
            btnRevenueShow.Click += (s, e) => LoadRevenueReport();
            btnDishSalesShow.Click += (s, e) => LoadDishSalesReport();
            btnWaiterStatsShow.Click += (s, e) => LoadWaiterStatsReport();
            btnPaymentMethodsShow.Click += (s, e) => LoadPaymentMethodsReport();
            btnLowStockRefresh.Click += (s, e) => LoadLowStockReport();

            // Загружаем данные
            LoadRevenueReport();
            LoadDishSalesReport();
            LoadWaiterStatsReport();
            LoadPaymentMethodsReport();
            LoadLowStockReport();
        }

        private void LoadRevenueReport()
        {
            try
            {
                var dt = repo.GetDailyRevenue(dtpRevenueFrom.Value, dtpRevenueTo.Value);
                dgvRevenue.DataSource = dt;

                if (dgvRevenue.Columns.Count > 0)
                {
                    dgvRevenue.Columns["Дата"].HeaderText = "Дата";
                    dgvRevenue.Columns["Платежей"].HeaderText = "Кол-во платежей";
                    dgvRevenue.Columns["Выручка (руб.)"].HeaderText = "Выручка (руб.)";
                    dgvRevenue.Columns["Средний чек (руб.)"].HeaderText = "Средний чек (руб.)";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка: {ex.Message}");
            }
        }

        private void LoadDishSalesReport()
        {
            try
            {
                var dt = repo.GetDishSales(dtpDishSalesFrom.Value, dtpDishSalesTo.Value);
                dgvDishSales.DataSource = dt;

                if (dgvDishSales.Columns.Count > 0)
                {
                    dgvDishSales.Columns["Блюдо"].HeaderText = "Блюдо";
                    dgvDishSales.Columns["Категория"].HeaderText = "Категория";
                    dgvDishSales.Columns["Кол-во"].HeaderText = "Кол-во продаж";
                    dgvDishSales.Columns["Выручка (руб.)"].HeaderText = "Выручка (руб.)";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка: {ex.Message}");
            }
        }

        private void LoadWaiterStatsReport()
        {
            try
            {
                var dt = repo.GetWaiterStats(dtpWaiterStatsFrom.Value, dtpWaiterStatsTo.Value);
                dgvWaiterStats.DataSource = dt;

                if (dgvWaiterStats.Columns.Count > 0)
                {
                    dgvWaiterStats.Columns["Официант"].HeaderText = "Официант";
                    dgvWaiterStats.Columns["Заказов"].HeaderText = "Кол-во заказов";
                    dgvWaiterStats.Columns["Сумма (руб.)"].HeaderText = "Сумма (руб.)";
                    dgvWaiterStats.Columns["Средний заказ (руб.)"].HeaderText = "Средний чек (руб.)";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка: {ex.Message}");
            }
        }

        private void LoadPaymentMethodsReport()
        {
            try
            {
                var dt = repo.GetPaymentMethods(dtpPaymentMethodsFrom.Value, dtpPaymentMethodsTo.Value);
                dgvPaymentMethods.DataSource = dt;

                if (dgvPaymentMethods.Columns.Count > 0)
                {
                    dgvPaymentMethods.Columns["Способ оплаты"].HeaderText = "Способ оплаты";
                    dgvPaymentMethods.Columns["Кол-во"].HeaderText = "Кол-во";
                    dgvPaymentMethods.Columns["Сумма (руб.)"].HeaderText = "Сумма (руб.)";
                    dgvPaymentMethods.Columns["%"].HeaderText = "Доля (%)";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка: {ex.Message}");
            }
        }

        private void LoadLowStockReport()
        {
            try
            {
                var dt = repo.GetLowStock();
                dgvLowStock.DataSource = dt;

                if (dgvLowStock.Columns.Count > 0)
                {
                    dgvLowStock.Columns["Ингредиент"].HeaderText = "Ингредиент";
                    dgvLowStock.Columns["Ед. изм."].HeaderText = "Ед. изм.";
                    dgvLowStock.Columns["Остаток"].HeaderText = "Остаток";
                    dgvLowStock.Columns["Минимум"].HeaderText = "Минимальный запас";
                    dgvLowStock.Columns["Поставщик"].HeaderText = "Поставщик";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Ошибка: {ex.Message}");
            }
        }
    }
}