using OfficeOpenXml;
using OfficeOpenXml.Drawing.Chart;
using System.ComponentModel;
using System.Diagnostics;
using System.Reflection;

namespace Register_office
{
	internal class ExcelManager
	{
		public static void ExportToExcel<T>(List<T> data, string filePath)
		{
			ExcelPackage.License.SetNonCommercialOrganization("Grant");

			using var package = new ExcelPackage();
			var worksheet = package.Workbook.Worksheets.Add("Отчёт");

			// Получаем свойства класса
			var properties = typeof(T).GetProperties();

			// Заголовки (используем атрибут [DisplayName] или имя свойства)
			for (int i = 0; i < properties.Length; i++)
			{
				var displayNameAttr = properties[i].GetCustomAttribute<DisplayNameAttribute>();
				worksheet.Cells[1, i + 1].Value = displayNameAttr?.DisplayName ?? properties[i].Name;
			}

			// Данные
			for (int i = 0; i < data.Count; i++)
			{
				for (int j = 0; j < properties.Length; j++)
				{
					worksheet.Cells[i + 2, j + 1].Value = properties[j].GetValue(data[i]);
				}
			}

			worksheet.Cells[worksheet.Dimension.Address].AutoFitColumns();
			try
			{
				File.WriteAllBytes(filePath, package.GetAsByteArray());
			}
			catch (Exception)
			{
				MessageBox.Show($"Не получилось сформировать отчет. Пожалуйста, закройте открытый файл отчета",
					"Отчет о наличии ЛП в конце дня",
					MessageBoxButtons.OK, MessageBoxIcon.Error);
			}
		}

		public static void OpenExcelFile(string filePath)
		{
			try
			{
				var process = new Process
				{
					StartInfo = new ProcessStartInfo(filePath)
					{
						UseShellExecute = true // Ключевой параметр!
					}
				};
				process.Start();
			}
			catch (Exception ex)
			{
				MessageBox.Show($"Не удалось открыть файл: {ex.Message}", "Отчет о наличии ЛП в конце дня",
					MessageBoxButtons.OK, MessageBoxIcon.Information);
			}
		}
	}
}
