// Copyright 2020 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_HANDWRITING_RECOGNIZER_IMPL_H_
#define ML_HANDWRITING_RECOGNIZER_IMPL_H_

#include <base/callback_forward.h>
#include <base/macros.h>
#include <mojo/public/cpp/bindings/pending_receiver.h>
#include <mojo/public/cpp/bindings/receiver.h>

#include "chrome/knowledge/handwriting/handwriting_interface.pb.h"
#include "ml/handwriting.h"
#include "ml/mojom/handwriting_recognizer.mojom.h"

namespace ml {

// The implementation of HandwritingRecognizer.
class HandwritingRecognizerImpl
    : public chromeos::machine_learning::mojom::HandwritingRecognizer {
 public:
  // Constructs a HandwritingRecognizerImpl; and set disconnect handler so
  // that the HandwritingRecognizerImpl will be deleted when the mojom
  // connection is destroyed.
  // Returns whether the object is create successfully.
  static bool Create(
      chromeos::machine_learning::mojom::HandwritingRecognizerSpecPtr spec,
      mojo::PendingReceiver<
          chromeos::machine_learning::mojom::HandwritingRecognizer> receiver);

  // Called when mojom connection is destroyed.
  ~HandwritingRecognizerImpl();

 private:
  // Creates a HandwritingRecognizer and Binds to `receiver` inside so that
  // Recognize can be called on the other side for a particular handwriting
  // reconition query.
  HandwritingRecognizerImpl(
      chromeos::machine_learning::mojom::HandwritingRecognizerSpecPtr spec,
      mojo::PendingReceiver<
          chromeos::machine_learning::mojom::HandwritingRecognizer> receiver);
  HandwritingRecognizerImpl(const HandwritingRecognizerImpl&) = delete;
  HandwritingRecognizerImpl& operator=(const HandwritingRecognizerImpl&) =
      delete;

  // mojom::HandwritingRecognizer:
  void Recognize(
      chromeos::machine_learning::mojom::HandwritingRecognitionQueryPtr query,
      RecognizeCallback callback) override;

  bool successfully_loaded_;
  // Pointer to the internal implementation of HandwritingRecognizer inside
  // the HandwritingLibrary.
  ::HandwritingRecognizer recognizer_;
  const ml::HandwritingLibrary* const library_;

  mojo::Receiver<chromeos::machine_learning::mojom::HandwritingRecognizer>
      receiver_;
};

}  // namespace ml

#endif  // ML_HANDWRITING_RECOGNIZER_IMPL_H_
