#ifndef SIRIUS_IMAGE_STREAMER_H_
#define SIRIUS_IMAGE_STREAMER_H_
#include "sirius/filter.h"
#include "sirius/i_frequency_resampler.h"
#include "sirius/gdal/input_stream.h"
#include "sirius/gdal/resampled_output_stream.h"
#include "sirius/gdal/wrapper.h"
namespace sirius {
class ImageStreamer {
  public:
    ImageStreamer(const std::string& input_path, const std::string& output_path,
                  const Size& block_size, const ZoomRatio& zoom_ratio,
                  const FilterMetadata& filter_metadata,
                  unsigned int max_parallel_workers);
    void Stream(const IFrequencyResampler& frequency_resampler,
                const Filter& filter);
  private:
    void RunMonothreadStream(const IFrequencyResampler& frequency_resampler,
                             const Filter& filter);
    void RunMultithreadStream(const IFrequencyResampler& frequency_resampler,
                              const Filter& filter);
  private:
    unsigned int max_parallel_workers_;
    Size block_size_;
    ZoomRatio zoom_ratio_;
    gdal::InputStream input_stream_;
    gdal::ResampledOutputStream output_stream_;
};
}  // namespace sirius
#endif  // SIRIUS_IMAGE_STREAMER_H_