ImageLoadFileMetadataForArtifactBuilderFactory
using kCura.WinEDDS;
using Relativity.DataExchange.Export.VolumeManagerV2.Directories;
using Relativity.DataExchange.Export.VolumeManagerV2.Metadata.Images.Lines;
using Relativity.Logging;
using System;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Metadata.Images
{
    public class ImageLoadFileMetadataForArtifactBuilderFactory
    {
        private readonly IFilePathTransformer _filePathTransformer;
        private readonly IImageLoadFileEntry _imageLoadFileEntry;
        private readonly IFullTextLoadFileEntry _fullTextLoadFileEntry;
        private readonly ILog _logger;
        public ImageLoadFileMetadataForArtifactBuilderFactory(IFilePathTransformer filePathTransformer, IImageLoadFileEntry imageLoadFileEntry, IFullTextLoadFileEntry fullTextLoadFileEntry, ILog logger)
        {
            _filePathTransformer = filePathTransformer;
            _imageLoadFileEntry = imageLoadFileEntry;
            _fullTextLoadFileEntry = fullTextLoadFileEntry;
            _logger = logger;
        }
        public IImageLoadFileMetadataForArtifactBuilder Create(ExportFile exportSettings)
        {
            ExportFile.ImageType? typeOfImage = exportSettings.TypeOfImage;
            ExportFile.ImageType imageType = ExportFile.ImageType.SinglePage;
            if ((typeOfImage.GetValueOrDefault() == imageType) & typeOfImage.HasValue)
                return new SinglePageMetadataForArtifactBuilder(exportSettings, _filePathTransformer, _imageLoadFileEntry, _fullTextLoadFileEntry, _logger);
            LoadFileType.FileFormat? logFileFormat = exportSettings.LogFileFormat;
            LoadFileType.FileFormat fileFormat = LoadFileType.FileFormat.Opticon;
            if ((logFileFormat.GetValueOrDefault() == fileFormat) & logFileFormat.HasValue)
                return new MultiPageOpticonMetadataForArtifactBuilder(exportSettings, _filePathTransformer, _imageLoadFileEntry, _fullTextLoadFileEntry, _logger);
            typeOfImage = exportSettings.TypeOfImage;
            imageType = ExportFile.ImageType.MultiPageTiff;
            if (!((typeOfImage.GetValueOrDefault() == imageType) & typeOfImage.HasValue)) {
                typeOfImage = exportSettings.TypeOfImage;
                imageType = ExportFile.ImageType.Pdf;
                if (!((typeOfImage.GetValueOrDefault() == imageType) & typeOfImage.HasValue))
                    goto IL_011d;
            }
            logFileFormat = exportSettings.LogFileFormat;
            fileFormat = LoadFileType.FileFormat.IPRO;
            if (!((logFileFormat.GetValueOrDefault() == fileFormat) & logFileFormat.HasValue)) {
                logFileFormat = exportSettings.LogFileFormat;
                fileFormat = LoadFileType.FileFormat.IPRO_FullText;
                if (!((logFileFormat.GetValueOrDefault() == fileFormat) & logFileFormat.HasValue))
                    goto IL_011d;
            }
            return new MultiPageNotOpticonMetadataForArtifactBuilder(exportSettings, _filePathTransformer, _imageLoadFileEntry, _fullTextLoadFileEntry, _logger);
            IL_011d:
            _logger.LogError("Invalid configuration for images. Image load file type {loadFileType}. Images format {imageFormat}.", new object[2] {
                exportSettings.LogFileFormat,
                exportSettings.TypeOfImage
            });
            throw new ArgumentException($"""{exportSettings.LogFileFormat}""{exportSettings.TypeOfImage}""");
        }
        public IImageLoadFileMetadataForArtifactBuilder CreateForUnsuccessfulRollup(ExportFile exportSettings)
        {
            return new SinglePageMetadataForArtifactBuilder(exportSettings, _filePathTransformer, _imageLoadFileEntry, _fullTextLoadFileEntry, _logger);
        }
    }
}