// 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_BLACK_LIST_H_
#define LIBWEAVE_SRC_ACCESS_BLACK_LIST_H_

#include <vector>

#include <base/time/time.h>

namespace weave {

class AccessBlackListManager {
 public:
  struct Entry {
    // user_id is empty, app_id is empty: block everything.
    // user_id is not empty, app_id is empty: block if user_id matches.
    // user_id is empty, app_id is not empty: block if app_id matches.
    // user_id is not empty, app_id is not empty: block if both match.
    std::vector<uint8_t> user_id;
    std::vector<uint8_t> app_id;

    // Time after which to discard the rule.
    base::Time expiration;
  };
  virtual ~AccessBlackListManager() = default;

  virtual void AddEntryAddedCallback(const base::Closure& callback) = 0;
  virtual void Block(const std::vector<uint8_t>& user_id,
                     const std::vector<uint8_t>& app_id,
                     const base::Time& expiration,
                     const DoneCallback& callback) = 0;
  virtual bool IsBlocked(const std::vector<uint8_t>& user_id,
                         const std::vector<uint8_t>& app_id) const = 0;
  virtual std::vector<Entry> GetEntries() const = 0;
  virtual size_t GetSize() const = 0;
  virtual size_t GetCapacity() const = 0;
};

inline bool operator==(const AccessBlackListManager::Entry& l,
                       const AccessBlackListManager::Entry& r) {
  return l.user_id == r.user_id && l.app_id == r.app_id &&
         l.expiration == r.expiration;
}

inline bool operator!=(const AccessBlackListManager::Entry& l,
                       const AccessBlackListManager::Entry& r) {
  return !(l == r);
}

}  // namespace weave

#endif  // LIBWEAVE_SRC_ACCESS_BLACK_LIST_H_
