using GB5Shared.DTO.Ice; using GB5Shared.FileImport; using IceImportDAL.DTO.IceImportPipeline; using Microsoft.Extensions.Logging; namespace IceImportDAL.CustomCode.Parsers; // IceMapIceSourceType = 0 (Excel). Wraps GB5Shared.FileImport.IFileToDataTableService — see // FlatTableEntitySplitter for how the single flat table it returns is split per entity. public class ExcelSourceFileParser : ISourceFileParser { public int SourceType => 0; private readonly IFileToDataTableService _fileReader; private readonly ILogger _logger; public ExcelSourceFileParser(IFileToDataTableService fileReader, ILogger logger) { _fileReader = fileReader; _logger = logger; } public async Task ParseAsync( Stream fileStream, string fileName, IceMapDTO mapDefinition, CancellationToken ct) { using var ms = new MemoryStream(); await fileStream.CopyToAsync(ms, ct).ConfigureAwait(false); var table = await _fileReader .ReadFromBytesAsync(ms.ToArray(), ImportFileTypeEnum.Excel, ct) .ConfigureAwait(false); return FlatTableEntitySplitter.Split(table, fileName, mapDefinition, _logger); } }