// 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 ML_DOCUMENT_SCANNER_IMPL_H_
#define ML_DOCUMENT_SCANNER_IMPL_H_

#include <memory>
#include <vector>

#include <chromeos/libdocumentscanner/document_scanner.h>
#include <mojo/public/cpp/bindings/pending_receiver.h>
#include <mojo/public/cpp/bindings/receiver.h>

#include "ml/mojom/document_scanner.mojom.h"

namespace ml {

class DocumentScannerImpl
    : public chromeos::machine_learning::mojom::DocumentScanner {
 public:
  explicit DocumentScannerImpl(
      std::unique_ptr<chromeos_camera::document_scanning::DocumentScanner>
          scanner);
  DocumentScannerImpl(const DocumentScannerImpl&) = delete;
  DocumentScannerImpl& operator=(const DocumentScannerImpl&) = delete;
  // Called when mojom connection is destroyed.
  ~DocumentScannerImpl();

 private:
  // mojom::DocumentScanner
  void DetectCornersFromNV12Image(
      mojo_base::mojom::ReadOnlySharedMemoryRegionPtr nv12_image,
      DetectCornersFromNV12ImageCallback callback) override;
  void DetectCornersFromJPEGImage(
      mojo_base::mojom::ReadOnlySharedMemoryRegionPtr jpeg_image,
      DetectCornersFromJPEGImageCallback callback) override;
  void DoPostProcessing(
      mojo_base::mojom::ReadOnlySharedMemoryRegionPtr jpeg_image,
      std::vector<gfx::mojom::PointFPtr> corners,
      DoPostProcessingCallback callback) override;

  const std::unique_ptr<chromeos_camera::document_scanning::DocumentScanner>
      scanner_;
};

}  // namespace ml

#endif  // ML_DOCUMENT_SCANNER_IMPL_H_
