// Copyright 2017 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 ASH_TEST_MEDIA_CLIENT_H_
#define ASH_TEST_MEDIA_CLIENT_H_

#include "ash/public/cpp/media_client.h"

namespace ash {

// Implement MediaClient mojo interface to simulate chrome behavior in tests.
// This breaks the ash/chrome dependency to allow testing ash code in isolation.
class TestMediaClient : public MediaClient {
 public:
  TestMediaClient();

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

  ~TestMediaClient() override;

  // MediaClient:
  void HandleMediaNextTrack() override;
  void HandleMediaPlayPause() override;
  void HandleMediaPlay() override;
  void HandleMediaPause() override;
  void HandleMediaStop() override;
  void HandleMediaPrevTrack() override;
  void HandleMediaSeekBackward() override;
  void HandleMediaSeekForward() override;
  void RequestCaptureState() override;
  void SuspendMediaSessions() override;

  int handle_media_next_track_count() const {
    return handle_media_next_track_count_;
  }
  int handle_media_play_pause_count() const {
    return handle_media_play_pause_count_;
  }
  int handle_media_play_count() const { return handle_media_play_count_; }
  int handle_media_pause_count() const { return handle_media_pause_count_; }
  int handle_media_stop_count() const { return handle_media_pause_count_; }
  int handle_media_prev_track_count() const {
    return handle_media_prev_track_count_;
  }
  int handle_media_seek_backward_count() const {
    return handle_media_seek_backward_count_;
  }
  int handle_media_seek_forward_count() const {
    return handle_media_seek_forward_count_;
  }
  bool media_sessions_suspended() const { return media_sessions_suspended_; }

 private:
  int handle_media_next_track_count_ = 0;
  int handle_media_play_pause_count_ = 0;
  int handle_media_play_count_ = 0;
  int handle_media_pause_count_ = 0;
  int handle_media_stop_count_ = 0;
  int handle_media_prev_track_count_ = 0;
  int handle_media_seek_backward_count_ = 0;
  int handle_media_seek_forward_count_ = 0;
  bool media_sessions_suspended_ = false;
};

}  // namespace ash

#endif  // ASH_TEST_MEDIA_CLIENT_H_
