// Copyright 2016 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_CAST_CONFIG_CONTROLLER_H_
#define ASH_CAST_CONFIG_CONTROLLER_H_

#include <vector>

#include "ash/public/interfaces/cast_config.mojom.h"
#include "base/macros.h"
#include "base/observer_list.h"
#include "mojo/public/cpp/bindings/associated_binding.h"
#include "mojo/public/cpp/bindings/binding_set.h"

namespace ash {

// There is a single CastConfigController which receives device
// information. This observer interface sends that information to all the
// TrayCast items--there is one per display.
class CastConfigControllerObserver {
 public:
  virtual void OnDevicesUpdated(
      std::vector<mojom::SinkAndRoutePtr> devices) = 0;

 protected:
  virtual ~CastConfigControllerObserver() {}
};

// We want to establish our connection lazily and preferably only once, as
// TrayCast instances will come and go.
class CastConfigController : public ash::mojom::CastConfig,
                             public ash::mojom::CastConfigClient {
 public:
  CastConfigController();
  ~CastConfigController() override;

  // Returns whether our SetClient() method has been called and the client
  // object pointer is still live.
  bool Connected();

  void AddObserver(CastConfigControllerObserver* observer);
  void RemoveObserver(CastConfigControllerObserver* observer);

  void BindRequest(mojom::CastConfigRequest request);

  // ash::mojom::CastConfig:
  void SetClient(mojom::CastConfigClientAssociatedPtrInfo client) override;
  void OnDevicesUpdated(std::vector<mojom::SinkAndRoutePtr> devices) override;

  // ash::mojom::CastConfigClient:
  void RequestDeviceRefresh() override;
  void CastToSink(mojom::CastSinkPtr sink) override;
  void StopCasting(mojom::CastRoutePtr route) override;

 private:
  // Bindings for the CastConfig interface.
  mojo::BindingSet<mojom::CastConfig> bindings_;

  mojom::CastConfigClientAssociatedPtr client_;

  base::ObserverList<CastConfigControllerObserver> observers_;

  DISALLOW_COPY_AND_ASSIGN(CastConfigController);
};

}  // namespace ash

#endif  // ASH_CAST_CONFIG_CONTROLLER_H_
