// Copyright 2015 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 FIDES_SETTINGS_SERVICE_H_
#define FIDES_SETTINGS_SERVICE_H_

#include <set>

#include <base/macros.h>

#include "fides/blob_ref.h"
#include "fides/key.h"

namespace base {
class Value;
}  // namespace base

namespace fides {

// An observer interface that allows consumers to get notified about setting
// changes.
class SettingsObserver {
 public:
  virtual ~SettingsObserver() = default;

  // Invoked when the observed setting changes. |keys| contains the set of keys
  // that have changed.
  virtual void OnSettingsChanged(const std::set<Key>& keys) = 0;
};

// SettingsService is the core API surface of fides. It allows consuming code to
// enumerate settings, read setting values and observe setting changes.
class SettingsService {
 public:
  virtual ~SettingsService() = default;

  // Get the value for the specified |key|. Returns nullptr if there is no value
  // present for this key.
  virtual BlobRef GetValue(const Key& key) const = 0;

  // Get the set of keys the service has values for. Only keys that match the
  // specified |prefix| will be returned. Keys match if they are either
  // identical to prefix or they share the same components as present in
  // |prefix| as a prefix.
  virtual const std::set<Key> GetKeys(const Key& prefix) const = 0;

  // Adds an observer.
  virtual void AddSettingsObserver(SettingsObserver* observer) = 0;

  // Removes an observer.
  virtual void RemoveSettingsObserver(SettingsObserver* observer) = 0;

 private:
  DISALLOW_ASSIGN(SettingsService);
};

}  // namespace fides

#endif  // FIDES_SETTINGS_SERVICE_H_
