// Copyright (c) 2013 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 CHROME_BROWSER_EXTENSIONS_API_SIGNED_IN_DEVICES_ID_MAPPING_HELPER_H__
#define CHROME_BROWSER_EXTENSIONS_API_SIGNED_IN_DEVICES_ID_MAPPING_HELPER_H__

#include <string>
#include <vector>

#include "base/memory/scoped_ptr.h"

namespace base {
class DictionaryValue;
}  // namespace base

namespace browser_sync {
class DeviceInfo;
}  // namespace browser_sync

class Profile;

namespace extensions {

// In order to not expose unique GUIDs for devices to third pary apps,
// the unique GUIDs are mapped to local ids and local ids are exposed to apps.
// The functions in this file are helper routines to do the mapping.

// Gets public id from GUID, given a dictionary that has the mapping.
// If it cannot find the GUID the public id returned will be empty.
std::string GetPublicIdFromGUID(
    const base::DictionaryValue& id_mapping,
    const std::string& guid);

// Gets the GUID from public id given a dictionary that has the mapping.
// If it cannot find the public id, the GUID returned will be empty.
std::string GetGUIDFromPublicId(
    const base::DictionaryValue& id_mapping,
    const std::string& id);

// Creates public id for devices that don't have a public id. To create mappings
// from scratch an empty dictionary must be passed. The dictionary will be
// updated with the mappings. The |device_info| objects will also be updated
// with the public ids.
// The dictionary would have the public id as the key and the
// device guid as the value.
void CreateMappingForUnmappedDevices(
    std::vector<browser_sync::DeviceInfo*>* device_info,
    base::DictionaryValue* value);

// Gets the device info for a given client id. If the device is not found
// the returned pointer would be null.
scoped_ptr<browser_sync::DeviceInfo> GetDeviceInfoForClientId(
    const std::string& client_id,
    const std::string& extension_id,
    Profile* profile);

}  // namespace extensions

#endif  // CHROME_BROWSER_EXTENSIONS_API_SIGNED_IN_DEVICES_ID_MAPPING_HELPER_H__
