// Copyright 2014 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 PEERD_PEER_MANAGER_IMPL_H_
#define PEERD_PEER_MANAGER_IMPL_H_

#include <map>
#include <string>

#include <base/time/time.h>
#include <dbus/bus.h>

#include "peerd/discovered_peer.h"
#include "peerd/peer_manager_interface.h"
#include "peerd/service.h"
#include "peerd/technologies.h"

namespace peerd {

class PeerManagerImpl : public PeerManagerInterface {
 public:
  PeerManagerImpl(const scoped_refptr<dbus::Bus> bus,
                  chromeos::dbus_utils::ExportedObjectManager* object_manager);
  ~PeerManagerImpl() override = default;

  // Inherited from PeerManagerInterface.  See comments there.
  void OnPeerDiscovered(const std::string& peer_id,
                        const base::Time& last_seen,
                        technologies::Technology technology) override;
  void OnServiceDiscovered(const std::string& peer_id,
                           const std::string& service_id,
                           const Service::ServiceInfo& info,
                           const Service::IpAddresses& addresses,
                           const base::Time& last_seen,
                           technologies::Technology technology) override;
  void OnPeerRemoved(const std::string& peer_id,
                     technologies::Technology technology) override;
  void OnServiceRemoved(const std::string& peer_id,
                        const std::string& service_id,
                        technologies::Technology technology) override;
  void OnTechnologyShutdown(technologies::Technology technology) override;

 private:
  scoped_refptr<dbus::Bus> bus_;
  chromeos::dbus_utils::ExportedObjectManager* object_manager_;
  std::map<std::string, std::unique_ptr<DiscoveredPeer>> peers_;
  uint64_t peers_discovered_{0};
  DISALLOW_COPY_AND_ASSIGN(PeerManagerImpl);
};

}  // namespace peerd

#endif  // PEERD_PEER_MANAGER_IMPL_H_
