// Copyright 2015 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.

#include "src/privet/device_ui_kind.h"

#include <unordered_map>

#include <base/logging.h>

namespace weave {
namespace privet {

std::string GetDeviceUiKind(const std::string& manifest_id) {

  // Map of device short id to ui device kind
  static const std::unordered_map<std::string, std::string> device_kind_map = {
    {"AC", "accessPoint"},
    {"AK", "aggregator"},
    {"AM", "camera"},
    {"AB", "developmentBoard"},
    {"AH", "acHeating"},
    {"AI", "light"},
    {"AO", "lock"},
    {"AE", "printer"},
    {"AF", "scanner"},
    {"AD", "speaker"},
    {"AL", "storage"},
    {"AJ", "toy"},
    {"AA", "vendor"},
    {"AN", "video"}
  };

  CHECK_EQ(5u, manifest_id.size());
  std::string short_id = manifest_id.substr(0, 2);

  auto iter = device_kind_map.find(short_id);
  if (iter != device_kind_map.end())
    return iter->second;

  LOG(FATAL) << "Invalid model id: " << manifest_id;
  return std::string();
}

}  // namespace privet
}  // namespace weave
