// Copyright (c) 2011 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.

#include "chrome/browser/extensions/extension_settings_sync_util.h"

#include "base/values.h"
#include "base/json/json_writer.h"
#include "chrome/browser/sync/protocol/extension_setting_specifics.pb.h"

namespace extension_settings_sync_util {

SyncData CreateData(
    const std::string& extension_id,
    const std::string& key,
    const Value& value) {
  sync_pb::EntitySpecifics specifics;
  sync_pb::ExtensionSettingSpecifics* setting_specifics =
      specifics.MutableExtension(sync_pb::extension_setting);
  setting_specifics->set_extension_id(extension_id);
  setting_specifics->set_key(key);
  std::string value_as_json;
  base::JSONWriter::Write(&value, false, &value_as_json);
  setting_specifics->set_value(value_as_json);
  return SyncData::CreateLocalData(extension_id + "/" + key, key, specifics);
}

SyncChange CreateAdd(
    const std::string& extension_id,
    const std::string& key,
    const Value& value) {
  return SyncChange(
      SyncChange::ACTION_ADD, CreateData(extension_id, key, value));
}

SyncChange CreateUpdate(
    const std::string& extension_id,
    const std::string& key,
    const Value& value) {
  return SyncChange(
      SyncChange::ACTION_UPDATE, CreateData(extension_id, key, value));
}

SyncChange CreateDelete(
    const std::string& extension_id, const std::string& key) {
  DictionaryValue no_value;
  return SyncChange(
      SyncChange::ACTION_DELETE, CreateData(extension_id, key, no_value));
}

}  // namespace extension_settings_sync_util