// Copyright 2017 The Chromium OS 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 MODEMFWD_MODEM_TRACKER_H_
#define MODEMFWD_MODEM_TRACKER_H_

#include <memory>
#include <set>
#include <string>
#include <vector>

#include <base/callback.h>
#include <base/macros.h>
#include <base/memory/weak_ptr.h>
#include <dbus/bus.h>
#include <dbus/object_path.h>
#include <shill/dbus-proxies.h>

#include "modemfwd/modem.h"

namespace modemfwd {

using OnModemAppearedCallback =
    base::Callback<void(std::unique_ptr<org::chromium::flimflam::DeviceProxy>)>;

class ModemTracker {
 public:
  ModemTracker(scoped_refptr<dbus::Bus> bus,
               const OnModemAppearedCallback& on_modem_appeared_callback);
  ~ModemTracker() = default;

 private:
  // Called when shill appears or disappears.
  void OnServiceAvailable(bool available);

  // Called when a property on the shill manager changes.
  void OnPropertyChanged(const std::string& property_name,
                         const brillo::Any& property_value);

  // Called when the device list changes.
  void OnDeviceListChanged(const std::vector<dbus::ObjectPath>& new_list);

  scoped_refptr<dbus::Bus> bus_;
  std::unique_ptr<org::chromium::flimflam::ManagerProxy> shill_proxy_;
  OnModemAppearedCallback on_modem_appeared_callback_;

  std::set<dbus::ObjectPath> modem_objects_;

  base::WeakPtrFactory<ModemTracker> weak_ptr_factory_;

  DISALLOW_COPY_AND_ASSIGN(ModemTracker);
};

}  // namespace modemfwd

#endif  // MODEMFWD_MODEM_TRACKER_H_
