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

#include "net/nqe/effective_connection_type.h"

#include "base/logging.h"

namespace {

const char kDeprectedEffectiveConnectionTypeSlow2G[] = "Slow2G";

}  // namespace

namespace net {

const char kEffectiveConnectionTypeUnknown[] = "Unknown";
const char kEffectiveConnectionTypeOffline[] = "Offline";
const char kEffectiveConnectionTypeSlow2G[] = "Slow-2G";
const char kEffectiveConnectionType2G[] = "2G";
const char kEffectiveConnectionType3G[] = "3G";
const char kEffectiveConnectionType4G[] = "4G";

const char* GetNameForEffectiveConnectionType(EffectiveConnectionType type) {
  switch (type) {
    case EFFECTIVE_CONNECTION_TYPE_UNKNOWN:
      return kEffectiveConnectionTypeUnknown;
    case EFFECTIVE_CONNECTION_TYPE_OFFLINE:
      return kEffectiveConnectionTypeOffline;
    case EFFECTIVE_CONNECTION_TYPE_SLOW_2G:
      return kEffectiveConnectionTypeSlow2G;
    case EFFECTIVE_CONNECTION_TYPE_2G:
      return kEffectiveConnectionType2G;
    case EFFECTIVE_CONNECTION_TYPE_3G:
      return kEffectiveConnectionType3G;
    case EFFECTIVE_CONNECTION_TYPE_4G:
      return kEffectiveConnectionType4G;
    case EFFECTIVE_CONNECTION_TYPE_LAST:
      NOTREACHED();
      return "";
  }
  NOTREACHED();
  return "";
}

base::Optional<EffectiveConnectionType> GetEffectiveConnectionTypeForName(
    base::StringPiece connection_type_name) {
  if (connection_type_name == kEffectiveConnectionTypeUnknown)
    return EFFECTIVE_CONNECTION_TYPE_UNKNOWN;
  if (connection_type_name == kEffectiveConnectionTypeOffline)
    return EFFECTIVE_CONNECTION_TYPE_OFFLINE;
  if (connection_type_name == kEffectiveConnectionTypeSlow2G)
    return EFFECTIVE_CONNECTION_TYPE_SLOW_2G;
  // Return EFFECTIVE_CONNECTION_TYPE_SLOW_2G if the deprecated string
  // representation is in use.
  if (connection_type_name == kDeprectedEffectiveConnectionTypeSlow2G)
    return EFFECTIVE_CONNECTION_TYPE_SLOW_2G;
  if (connection_type_name == kEffectiveConnectionType2G)
    return EFFECTIVE_CONNECTION_TYPE_2G;
  if (connection_type_name == kEffectiveConnectionType3G)
    return EFFECTIVE_CONNECTION_TYPE_3G;
  if (connection_type_name == kEffectiveConnectionType4G)
    return EFFECTIVE_CONNECTION_TYPE_4G;
  return base::nullopt;
}

const char* DeprecatedGetNameForEffectiveConnectionType(
    EffectiveConnectionType type) {
  switch (type) {
    case EFFECTIVE_CONNECTION_TYPE_SLOW_2G:
      return kDeprectedEffectiveConnectionTypeSlow2G;
    default:
      return GetNameForEffectiveConnectionType(type);
  }
}

}  // namespace net
