// Copyright 2020 The Chromium 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 MEDIA_MOJO_SERVICES_PLAYBACK_EVENTS_RECORDER_H_
#define MEDIA_MOJO_SERVICES_PLAYBACK_EVENTS_RECORDER_H_

#include "media/mojo/mojom/playback_events_recorder.mojom.h"
#include "media/mojo/services/media_mojo_export.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/abseil-cpp/absl/types/optional.h"

namespace media {

class MEDIA_MOJO_EXPORT PlaybackEventsRecorder final
    : public mojom::PlaybackEventsRecorder {
 public:
  static void Create(
      mojo::PendingReceiver<mojom::PlaybackEventsRecorder> receiver);

  PlaybackEventsRecorder();
  ~PlaybackEventsRecorder() final;

  PlaybackEventsRecorder(const PlaybackEventsRecorder&) = delete;
  PlaybackEventsRecorder& operator=(const PlaybackEventsRecorder&) =
      delete;

  // mojom::PlaybackEventsRecorder implementation.
  void OnPlaying() final;
  void OnPaused() final;
  void OnSeeking() final;
  void OnEnded() final;
  void OnBuffering() final;
  void OnBufferingComplete() final;
  void OnError(PipelineStatus status) final;
  void OnNaturalSizeChanged(const gfx::Size& size) final;
  void OnPipelineStatistics(const PipelineStatistics& stats) final;

 private:
  class BitrateEstimator {
   public:
    BitrateEstimator();
    ~BitrateEstimator();

    void Update(const PipelineStatistics& stats);
    void OnPause();

   private:
    base::TimeDelta time_elapsed_;
    size_t audio_bytes_ = 0;
    size_t video_bytes_ = 0;

    absl::optional<PipelineStatistics> last_stats_;
    base::TimeTicks last_stats_time_;
  };

  enum class BufferingState {
    kInitialBuffering,
    kBuffering,
    kBuffered,
  };

  BufferingState buffering_state_ = BufferingState::kInitialBuffering;
  base::TimeTicks buffering_start_time_;
  base::TimeTicks last_buffering_end_time_;

  BitrateEstimator bitrate_estimator_;
};

}  // namespace media

#endif  // MEDIA_MOJO_SERVICES_PLAYBACK_EVENTS_RECORDER_H_
