// Copyright 2015 The Weave 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 LIBWEAVE_SRC_BASE_API_HANDLER_H_
#define LIBWEAVE_SRC_BASE_API_HANDLER_H_

#include <memory>
#include <string>

#include <base/memory/weak_ptr.h>

namespace weave {

class Command;
class Device;
class DeviceRegistrationInfo;
struct Settings;

// Handles commands from 'base' package.
// Objects of the class subscribe for notification from CommandManager and
// execute incoming commands.
// Handled commands:
//  base.updateDeviceInfo
//  base.updateBaseConfiguration
class BaseApiHandler final {
 public:
  BaseApiHandler(DeviceRegistrationInfo* device_info, Device* device);

 private:
  void UpdateBaseConfiguration(const std::weak_ptr<Command>& command);
  void UpdateDeviceInfo(const std::weak_ptr<Command>& command);
  bool UpdateState(const std::string& anonymous_access_role,
                   bool discovery_enabled,
                   bool pairing_enabled);
  void OnConfigChanged(const Settings& settings);

  DeviceRegistrationInfo* device_info_;
  Device* device_;

  base::WeakPtrFactory<BaseApiHandler> weak_ptr_factory_{this};
  DISALLOW_COPY_AND_ASSIGN(BaseApiHandler);
};

}  // namespace weave

#endif  // LIBWEAVE_SRC_BASE_API_HANDLER_H_
