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

#ifndef CHROME_BROWSER_ASH_INPUT_METHOD_SUGGESTIONS_SOURCE_H_
#define CHROME_BROWSER_ASH_INPUT_METHOD_SUGGESTIONS_SOURCE_H_

#include <vector>

#include "base/functional/callback.h"
#include "chromeos/ash/services/ime/public/cpp/assistive_suggestions.h"

namespace ash {
namespace input_method {

// Represents a source of text based suggestions.
class SuggestionsSource {
 public:
  virtual ~SuggestionsSource() = default;

  // Get any suggestions that have been generated by the class. This may, or
  // may not, return suggestions.
  virtual std::vector<ime::AssistiveSuggestion> GetSuggestions() = 0;
};

// As the name suggests, this also represents a source of text based
// suggestions, however the interface for fetching suggestions from this object
// is asynchronous.
class AsyncSuggestionsSource {
 public:
  virtual ~AsyncSuggestionsSource() = default;

  using RequestSuggestionsCallback =
      base::OnceCallback<void(const std::vector<ime::AssistiveSuggestion>&)>;

  // Fetch the suggestions from this object, any suggestions fetched will be
  // returned in the callback passed.
  virtual void RequestSuggestions(
      const std::string& preceding_text,
      const ime::AssistiveSuggestionMode& suggestion_mode,
      const std::vector<ime::DecoderCompletionCandidate>& completion_candidates,
      RequestSuggestionsCallback callback) = 0;

  // Is the source ready to produce suggestions?
  virtual bool IsAvailable() = 0;
};

}  // namespace input_method
}  // namespace ash

#endif  // CHROME_BROWSER_ASH_INPUT_METHOD_SUGGESTIONS_SOURCE_H_
