// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/net/secure_dns_config.h"

#include <string_view>

#include "net/base/ip_endpoint.h"

// static
constexpr char SecureDnsConfig::kModeOff[];
constexpr char SecureDnsConfig::kModeAutomatic[];
constexpr char SecureDnsConfig::kModeSecure[];

SecureDnsConfig::SecureDnsConfig(
    net::SecureDnsMode mode,
    net::DnsOverHttpsConfig doh_servers,
    ManagementMode management_mode,
    std::vector<net::IPEndPoint> fallback_doh_nameservers)
    : mode_(mode),
      doh_servers_(std::move(doh_servers)),
      management_mode_(management_mode),
      fallback_doh_nameservers_(std::move(fallback_doh_nameservers)) {}
SecureDnsConfig::SecureDnsConfig(SecureDnsConfig&& other) = default;
SecureDnsConfig& SecureDnsConfig::operator=(SecureDnsConfig&& other) = default;
SecureDnsConfig::~SecureDnsConfig() = default;

// static
std::optional<net::SecureDnsMode> SecureDnsConfig::ParseMode(
    std::string_view name) {
  if (name == kModeSecure) {
    return net::SecureDnsMode::kSecure;
  } else if (name == kModeAutomatic) {
    return net::SecureDnsMode::kAutomatic;
  } else if (name == kModeOff) {
    return net::SecureDnsMode::kOff;
  }
  return std::nullopt;
}

// static
const char* SecureDnsConfig::ModeToString(net::SecureDnsMode mode) {
  switch (mode) {
    case net::SecureDnsMode::kSecure:
      return kModeSecure;
    case net::SecureDnsMode::kAutomatic:
      return kModeAutomatic;
    case net::SecureDnsMode::kOff:
      return kModeOff;
  }
}
