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

#ifndef COMPONENTS_LIVE_CAPTION_CAPTION_BUBBLE_SETTINGS_H_
#define COMPONENTS_LIVE_CAPTION_CAPTION_BUBBLE_SETTINGS_H_

#include <string>

#include "base/i18n/language_tag.h"
#include "base/memory/weak_ptr.h"

namespace captions {

// Caption Bubble Settings allows caption bubble to get and observe the caption
// bubble settings which can be set from chrome settings in case of live caption
// or from school tools UI in case of BabelOrca. It also allows storage and
// retrieval of the settings set by the user from the caption bubble itself.
class CaptionBubbleSettings {
 public:
  class Observer {
   public:
    Observer(const Observer&) = delete;
    Observer& operator=(const Observer&) = delete;

    virtual ~Observer() = default;

    virtual void OnLiveTranslateEnabledChanged() = 0;
    virtual void OnLiveCaptionLanguageChanged() = 0;
    virtual void OnLiveTranslateTargetLanguageChanged() = 0;

   protected:
    Observer() = default;
  };
  CaptionBubbleSettings(const CaptionBubbleSettings&) = delete;
  CaptionBubbleSettings& operator=(const CaptionBubbleSettings&) = delete;

  virtual ~CaptionBubbleSettings() = default;

  virtual void SetObserver(base::WeakPtr<Observer> observer) = 0;
  virtual void RemoveObserver() = 0;

  virtual bool IsLiveTranslateFeatureEnabled() = 0;

  virtual bool GetLiveCaptionBubbleExpanded() = 0;
  virtual bool GetLiveTranslateEnabled() = 0;
  virtual std::string GetLiveCaptionLanguageCode() = 0;
  virtual base::i18n::LanguageTag GetLiveTranslateTargetLanguageCode() = 0;

  virtual void SetLiveCaptionEnabled(bool enabled) = 0;
  virtual void SetLiveCaptionBubbleExpanded(bool expanded) = 0;
  virtual void SetLiveTranslateTargetLanguageCode(
      const base::i18n::LanguageTag& language_tag) = 0;

  virtual bool ShouldAdjustPositionOnExpand() = 0;

 protected:
  CaptionBubbleSettings() = default;
};

}  // namespace captions

#endif  // COMPONENTS_LIVE_CAPTION_CAPTION_BUBBLE_SETTINGS_H_
