// Copyright 2017 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 "components/payments/core/payment_address.h"

#include "base/values.h"

namespace payments {

namespace {

// These are defined as part of the spec at:
// https://w3c.github.io/browser-payment-api/#paymentaddress-interface
static const char kAddressAddressLine[] = "addressLine";
static const char kAddressCity[] = "city";
static const char kAddressCountry[] = "country";
static const char kAddressDependentLocality[] = "dependentLocality";
static const char kAddressOrganization[] = "organization";
static const char kAddressPhone[] = "phone";
static const char kAddressPostalCode[] = "postalCode";
static const char kAddressRecipient[] = "recipient";
static const char kAddressRegion[] = "region";
static const char kAddressSortingCode[] = "sortingCode";

}  // namespace

std::unique_ptr<base::DictionaryValue> PaymentAddressToDictionaryValue(
    const mojom::PaymentAddress& address) {
  auto result = std::make_unique<base::DictionaryValue>();
  result->SetString(kAddressCountry, address.country);
  auto address_line_list = std::make_unique<base::ListValue>();
  for (const std::string& address_line_string : address.address_line) {
    if (!address_line_string.empty())
      address_line_list->AppendString(address_line_string);
  }
  result->Set(kAddressAddressLine, std::move(address_line_list));
  result->SetString(kAddressRegion, address.region);
  result->SetString(kAddressCity, address.city);
  result->SetString(kAddressDependentLocality, address.dependent_locality);
  result->SetString(kAddressPostalCode, address.postal_code);
  result->SetString(kAddressSortingCode, address.sorting_code);
  result->SetString(kAddressOrganization, address.organization);
  result->SetString(kAddressRecipient, address.recipient);
  result->SetString(kAddressPhone, address.phone);

  return result;
}

}  // namespace payments
