public AccountEtl(
     IBankStatementWebScraper bankStatementWebScraper,
     IAccountsRepository accounts,
     IUnitOfWork unitOfWork)
 {
     _bankStatementWebScraper = bankStatementWebScraper;
     _accounts   = accounts;
     _unitOfWork = unitOfWork;
 }
    public TransactionEtl(
        ILogger <TransactionEtl> logger,
        IBankStatementWebScraper bankStatementWebScraper,
        IStatementFactory statementFactory,
        ITransactionImportJobRepository transactionImportJobs,
        IAccountsRepository accounts,
        ITransactionsRepository transactions,
        IUnitOfWork unitOfWork,
        IOptions <TransactionEtlOptions> options)
    {
        _logger = logger;
        _bankStatementWebScraper = bankStatementWebScraper;
        _statementFactory        = statementFactory;
        _transactionImportJobs   = transactionImportJobs;
        _accounts     = accounts;
        _transactions = transactions;
        _unitOfWork   = unitOfWork;
        _options      = options.Value;

        _unprocessedPath = options.Value.UnprocessedStatementDirectory
                           ?? throw new ArgumentNullException(
                                     nameof(options.Value.UnprocessedStatementDirectory),
                                     "Unprocessed statement directory is required");

        if (!Directory.Exists(_unprocessedPath))
        {
            Directory.CreateDirectory(_unprocessedPath);
        }

        _processedPath = options.Value.ProcessedStatementDirectory
                         ?? throw new ArgumentNullException(
                                   nameof(options.Value.ProcessedStatementDirectory),
                                   "Processed statement directory is required");

        if (!Directory.Exists(_processedPath))
        {
            Directory.CreateDirectory(_processedPath);
        }

        _moveProcessedStatements = options.Value.MoveProcessedStatements;
    }