using System;
using XP.Common.Logging.Interfaces;
using XP.ReportEngine.Interfaces;
using XP.ReportEngine.Models;
namespace XP.ReportEngine.Services
{
///
/// 报告生成器工厂实现 | Report generator factory implementation
/// 根据输出格式创建对应的报告生成器实例
/// Creates report generator instances based on output format
///
public class ReportGeneratorFactory : IReportGeneratorFactory
{
private readonly ILoggerService _logger;
private readonly IReportGenerator _pdfReportGenerator;
///
/// 构造函数 | Constructor
///
/// 日志服务 | Logger service
/// PDF 报告生成器 | PDF report generator
public ReportGeneratorFactory(ILoggerService logger, IReportGenerator pdfReportGenerator)
{
_logger = logger?.ForModule() ?? throw new ArgumentNullException(nameof(logger));
_pdfReportGenerator = pdfReportGenerator ?? throw new ArgumentNullException(nameof(pdfReportGenerator));
}
///
/// 根据输出格式创建生成器 | Create generator by output format
/// 当前仅支持 PDF 格式,未来可扩展 Excel/CSV
/// Currently only supports PDF format, extensible for Excel/CSV in the future
///
/// 输出格式 | Output format
/// 对应格式的报告生成器 | Report generator for the specified format
/// 当请求不支持的格式时抛出 | Thrown when unsupported format is requested
public IReportGenerator Create(ReportOutputFormat format)
{
_logger.Info("创建报告生成器,格式: {Format} | Creating report generator, format: {Format}", format);
switch (format)
{
case ReportOutputFormat.Pdf:
return _pdfReportGenerator;
default:
var message = $"不支持的报告输出格式: {format} | Unsupported report output format: {format}";
_logger.Error(null, message);
throw new NotSupportedException(message);
}
}
}
}