private static Configuration CreateCsvConfiguration(FileStructureMetadata fileStructureMetadata)
        {
            var csvConfiguration = CreateDefaultCsvConfiguration(fileStructureMetadata.SourceKind);

            csvConfiguration.CultureInfo = fileStructureMetadata.GetCultureInfo();
            csvConfiguration.Encoding    = Encoding.GetEncoding(fileStructureMetadata.Encoding);
            return(csvConfiguration);
        }
        private static Configuration CreateDefaultCsvConfiguration(SourceKind sourceKind)
        {
            var configuration = new Configuration();

            switch (sourceKind)
            {
            case SourceKind.FortisCsvArchive:
                configuration.RegisterClassMap <FortisOperationArchiveCsvMap>();
                configuration.Encoding          = Encoding.UTF8;
                configuration.CultureInfo       = FileStructureMetadata.GetCultureInfo("fr-BE", ",");
                configuration.Delimiter         = ";";
                configuration.QuoteAllFields    = true;
                configuration.TrimOptions       = TrimOptions.InsideQuotes;
                configuration.MissingFieldFound = LogMissingFieldFound;
                configuration.HeaderValidated   = LogHeaderValidatationFailed;
                break;

            case SourceKind.FortisCsvExport:
                configuration.RegisterClassMap <FortisOperationExportCsvMap>();
                var ansiEncoding = Encoding.GetEncoding(1252);
                configuration.Encoding          = ansiEncoding;
                configuration.CultureInfo       = FileStructureMetadata.GetCultureInfo("fr-BE", ".");
                configuration.Delimiter         = ";";
                configuration.QuoteAllFields    = false;
                configuration.TrimOptions       = TrimOptions.Trim;
                configuration.MissingFieldFound = LogMissingFieldFound;
                configuration.HeaderValidated   = LogHeaderValidatationFailed;
                break;

            case SourceKind.SodexoCsvExport:
                configuration.RegisterClassMap <SodexoOperationCsvMap>();
                configuration.Encoding          = Encoding.UTF8;
                configuration.CultureInfo       = FileStructureMetadata.GetCultureInfo("fr-BE", ".");
                configuration.Delimiter         = ";";
                configuration.QuoteAllFields    = true;
                configuration.TrimOptions       = TrimOptions.InsideQuotes;
                configuration.MissingFieldFound = LogMissingFieldFound;
                configuration.HeaderValidated   = LogHeaderValidatationFailed;
                break;

            case SourceKind.InternalCsvExport:
                configuration.RegisterClassMap <UnifiedAccountOperationCsvMap>();
                configuration.Encoding          = Encoding.UTF8;
                configuration.CultureInfo       = FileStructureMetadata.GetCultureInfo("fr-BE", ".");
                configuration.Delimiter         = ";";
                configuration.QuoteAllFields    = true;
                configuration.TrimOptions       = TrimOptions.InsideQuotes;
                configuration.MissingFieldFound = LogMissingFieldFound;
                configuration.HeaderValidated   = LogHeaderValidatationFailed;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(sourceKind), sourceKind, null);
            }

            return(configuration);
        }