class BulkUpload::Downloader
  attr_reader :bulk_upload

  delegate :path, to: :file

  def initialize(bulk_upload:)
    @bulk_upload = bulk_upload
  end

  def call
    download
  end

private

  def download
    io = storage_service.get_file_io(bulk_upload.identifier)
    file.write(io.read)
    io.close
    file.close
  end

  def file
    @file ||= Tempfile.new
  end

  def storage_service
    @storage_service ||= Storage::S3Service.new(
      Configuration::PaasConfigurationService.new,
      ENV["CSV_DOWNLOAD_PAAS_INSTANCE"],
    )
  end
end