using Check.Main.Camera;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Check.Main.Common
{
    public static class StatisticsExporter
    {
        /// 
        /// 将给定的统计数据导出到指定的Excel文件路径。
        /// 
        /// 要导出的统计数据对象。
        /// 自定义的文件名部分(如 "Reset" 或 "Shutdown")。
        public static void ExportToExcel(StatisticsData data, string customFileName)
        {
            if (data.TotalCount == 0) return; // 如果没有数据,则不导出
            try
            {
                string directory = Path.Combine(Application.StartupPath, "Statistics");
                Directory.CreateDirectory(directory); // 确保文件夹存在
                string fileName = $"Statistics_{customFileName}_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.xlsx";
                string filePath = Path.Combine(directory, fileName);
                // 创建工作簿和工作表
                IWorkbook workbook = new XSSFWorkbook();
                ISheet sheet = workbook.CreateSheet("生产统计");
                // --- 创建样式 (可选,但能让表格更好看) ---
                IFont boldFont = workbook.CreateFont();
                boldFont.IsBold = true;
                ICellStyle headerStyle = workbook.CreateCellStyle();
                headerStyle.SetFont(boldFont);
                // --- 创建表头 ---
                IRow headerRow = sheet.CreateRow(0);
                headerRow.CreateCell(0).SetCellValue("项目");
                headerRow.CreateCell(1).SetCellValue("数值");
                headerRow.GetCell(0).CellStyle = headerStyle;
                headerRow.GetCell(1).CellStyle = headerStyle;
                // --- 填充数据 ---
                sheet.CreateRow(1).CreateCell(0).SetCellValue("良品数 (OK)");
                sheet.GetRow(1).CreateCell(1).SetCellValue(data.GoodCount);
                sheet.CreateRow(2).CreateCell(0).SetCellValue("不良品数 (NG)");
                sheet.GetRow(2).CreateCell(1).SetCellValue(data.NgCount);
                sheet.CreateRow(3).CreateCell(0).SetCellValue("产品总数");
                sheet.GetRow(3).CreateCell(1).SetCellValue(data.TotalCount);
                sheet.CreateRow(4).CreateCell(0).SetCellValue("良率 (Yield)");
                sheet.GetRow(4).CreateCell(1).SetCellValue(data.YieldRate.ToString("P2"));
                // 自动调整列宽
                sheet.AutoSizeColumn(0);
                sheet.AutoSizeColumn(1);
                // --- 写入文件 ---
                using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
                {
                    workbook.Write(fs);
                }
                ThreadSafeLogger.Log($"统计数据已成功导出到: {filePath}");
            }
            catch (Exception ex)
            {
                ThreadSafeLogger.Log($"[ERROR] 导出统计数据失败: {ex.Message}");
                MessageBox.Show($"导出统计数据失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}