// Copyright 2016 The Chromium 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 EXTENSIONS_BROWSER_VALUE_STORE_VALUE_STORE_FACTORY_H_
#define EXTENSIONS_BROWSER_VALUE_STORE_VALUE_STORE_FACTORY_H_

#include <memory>
#include <set>

#include "base/memory/ref_counted.h"
#include "extensions/browser/api/storage/settings_namespace.h"
#include "extensions/common/extension_id.h"

class ValueStore;

namespace extensions {

// Create new value stores for rules, state, or settings. For settings will
// also create stores for the specified namespace and model type.
//
// Note: This factory creates the lower level stores that directly read/write to
//       disk. Sync/Managed stores are created directly, but delegate their
//       calls to a |ValueStore| created by this interface.
class ValueStoreFactory : public base::RefCountedThreadSafe<ValueStoreFactory> {
 public:
  enum class ModelType { APP, EXTENSION };

  // Create a |ValueStore| to contain rules data.
  virtual std::unique_ptr<ValueStore> CreateRulesStore() = 0;

  // Create a |ValueStore| to contain state data.
  virtual std::unique_ptr<ValueStore> CreateStateStore() = 0;

  // Create a |ValueStore| to contain settings data for a specific extension
  // namespace and model type.
  virtual std::unique_ptr<ValueStore> CreateSettingsStore(
      settings_namespace::Namespace settings_namespace,
      ModelType model_type,
      const ExtensionId& extension_id) = 0;

  // Delete all settings for specified given extension in the specified
  // namespace/model_type.
  virtual void DeleteSettings(settings_namespace::Namespace settings_namespace,
                              ModelType model_type,
                              const ExtensionId& extension_id) = 0;

  // Are there any settings stored in the specified namespace/model_type for
  // the given extension?
  virtual bool HasSettings(settings_namespace::Namespace settings_namespace,
                           ModelType model_type,
                           const ExtensionId& extension_id) = 0;

  // Return all extension ID's with settings stored in the given
  // namespace/model_type.
  virtual std::set<ExtensionId> GetKnownExtensionIDs(
      settings_namespace::Namespace settings_namespace,
      ModelType model_type) const = 0;

 protected:
  friend class base::RefCountedThreadSafe<ValueStoreFactory>;
  virtual ~ValueStoreFactory() {}
};

}  // namespace extensions

#endif  // EXTENSIONS_BROWSER_VALUE_STORE_VALUE_STORE_FACTORY_H_
