// Copyright 2021 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef LORGNETTE_IMAGE_READERS_IMAGE_READER_H_
#define LORGNETTE_IMAGE_READERS_IMAGE_READER_H_

#include <cstdint>

#include <base/files/file.h>
#include <base/optional.h>
#include <brillo/errors/error.h>

#include "lorgnette/sane_client.h"

namespace lorgnette {

// This class is responsible for reading data from a bitmap and producing an
// image.
class ImageReader {
 public:
  ImageReader(const ImageReader&) = delete;
  ImageReader& operator=(const ImageReader&) = delete;
  virtual ~ImageReader() = default;

  // Reads one row of data and appends it to the image in progress.
  virtual bool ReadRow(brillo::ErrorPtr* error, uint8_t* data) = 0;

  // Finalizes the image. Should only be called when all image data has been
  // read by ReadData().
  virtual bool Finalize(brillo::ErrorPtr* error) = 0;

 protected:
  // Concrete ImageReaders' Create() methods should be used instead.
  ImageReader(const ScanParameters& params, base::ScopedFILE out_file);

  // Performs some sanity checks on |params|. Additional format-specific
  // validation should be performed by each concrete image reader. If this
  // function returns false, no other methods should be called on the
  // image reader.
  virtual bool ValidateParams(brillo::ErrorPtr* error);

  // Sets up objects needed by the image reader. Must be called before
  // ReadData().
  virtual bool Initialize(brillo::ErrorPtr* error,
                          const base::Optional<int>& resolution) = 0;

  const ScanParameters params_;
  base::ScopedFILE out_file_;
};

}  // namespace lorgnette

#endif  // LORGNETTE_IMAGE_READERS_IMAGE_READER_H_
