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

#ifndef CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_ENGINE_H_
#define CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_ENGINE_H_

#include <vector>

#include "components/speech/audio_buffer.h"
#include "content/common/content_export.h"
#include "media/base/audio_parameters.h"
#include "media/mojo/mojom/speech_recognition_error.mojom.h"
#include "media/mojo/mojom/speech_recognition_recognition_context.h"
#include "media/mojo/mojom/speech_recognition_result.mojom.h"

namespace blink {
namespace mojom {
class SpeechRecognitionError;
}  // namespace mojom
}  // namespace blink

namespace content {

// This is the interface for any speech recognition engine, local or network.
//
// The expected call sequence is:
// StartRecognition      Mandatory at beginning of SR.
//   TakeAudioChunk      For every audio chunk pushed.
//   AudioChunksEnded    Finalize the audio stream (omitted in case of errors).
// EndRecognition        Mandatory at end of SR (even on errors).
//
// UpdateRecognitionContext can be called anywhere after StartRecognition and
// before EndRecognition.
//
// No delegate callbacks are performed before StartRecognition or after
// EndRecognition. If a recognition was started, the caller can free the
// SpeechRecognitionEngine only after calling EndRecognition.

class CONTENT_EXPORT SpeechRecognitionEngine {
 public:
  class Delegate {
   public:
    // Called whenever a result is retrieved.
    virtual void OnSpeechRecognitionEngineResults(
        const std::vector<media::mojom::WebSpeechRecognitionResultPtr>&
            results) = 0;
    virtual void OnSpeechRecognitionEngineEndOfUtterance() = 0;
    virtual void OnSpeechRecognitionEngineError(
        const media::mojom::SpeechRecognitionError& error) = 0;

   protected:
    virtual ~Delegate() = default;
  };

  SpeechRecognitionEngine() = default;
  virtual ~SpeechRecognitionEngine() = default;
  virtual void StartRecognition() = 0;
  virtual void UpdateRecognitionContext(
      const media::SpeechRecognitionRecognitionContext&
          recognition_context) = 0;
  virtual void EndRecognition() = 0;
  virtual void TakeAudioChunk(const AudioChunk& data) = 0;
  virtual void AudioChunksEnded() = 0;
  virtual int GetDesiredAudioChunkDurationMs() const = 0;

  void SetAudioParameters(media::AudioParameters audio_parameters);

  // set_delegate detached from constructor for lazy dependency injection.
  void set_delegate(Delegate* delegate);

 protected:
  raw_ptr<Delegate> delegate_ = nullptr;
  media::AudioParameters audio_parameters_;
};

}  // namespace content

#endif  // CONTENT_BROWSER_SPEECH_SPEECH_RECOGNITION_ENGINE_H_
