// Copyright 2016 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_ACCESS_API_HANDLER_H_
#define LIBWEAVE_SRC_ACCESS_API_HANDLER_H_

#include <memory>

#include <base/memory/weak_ptr.h>
#include <weave/error.h>

namespace weave {

class AccessBlackListManager;
class Command;
class Device;

// Handles commands for 'accessControlBlackList' trait.
// Objects of the class subscribe for notification from CommandManager and
// execute incoming commands.
// Handled commands:
//  accessControlBlackList.revoke
//  accessControlBlackList.list
class AccessApiHandler final {
 public:
  AccessApiHandler(Device* device, AccessBlackListManager* manager);

 private:
  void Block(const std::weak_ptr<Command>& command);
  void List(const std::weak_ptr<Command>& command);
  void UpdateState();

  void OnCommandDone(const std::weak_ptr<Command>& command, ErrorPtr error);

  Device* device_{nullptr};
  AccessBlackListManager* manager_{nullptr};

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

}  // namespace weave

#endif  // LIBWEAVE_SRC_ACCESS_API_HANDLER_H_
