/**
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0.
 */

#pragma once
#include <aws/core/http/HttpResponse.h>
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/core/utils/memory/stl/AWSVector.h>
#include <aws/geo-places/GeoPlaces_EXPORTS.h>
#include <aws/geo-places/model/ReverseGeocodeResultItem.h>

#include <utility>

namespace Aws {
template <typename RESULT_TYPE>
class AmazonWebServiceResult;

namespace Utils {
namespace Json {
class JsonValue;
}  // namespace Json
}  // namespace Utils
namespace GeoPlaces {
namespace Model {
class ReverseGeocodeResult {
 public:
  AWS_GEOPLACES_API ReverseGeocodeResult() = default;
  AWS_GEOPLACES_API ReverseGeocodeResult(const Aws::AmazonWebServiceResult<Aws::Utils::Json::JsonValue>& result);
  AWS_GEOPLACES_API ReverseGeocodeResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Json::JsonValue>& result);

  ///@{
  /**
   * <p>The pricing bucket for which the query is charged at.</p> <p>For more
   * information on pricing, please visit <a
   * href="https://aws.amazon.com/location/pricing/">Amazon Location Service
   * Pricing</a>.</p>
   */
  inline const Aws::String& GetPricingBucket() const { return m_pricingBucket; }
  template <typename PricingBucketT = Aws::String>
  void SetPricingBucket(PricingBucketT&& value) {
    m_pricingBucketHasBeenSet = true;
    m_pricingBucket = std::forward<PricingBucketT>(value);
  }
  template <typename PricingBucketT = Aws::String>
  ReverseGeocodeResult& WithPricingBucket(PricingBucketT&& value) {
    SetPricingBucket(std::forward<PricingBucketT>(value));
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>List of places or results returned for a query. </p>
   */
  inline const Aws::Vector<ReverseGeocodeResultItem>& GetResultItems() const { return m_resultItems; }
  template <typename ResultItemsT = Aws::Vector<ReverseGeocodeResultItem>>
  void SetResultItems(ResultItemsT&& value) {
    m_resultItemsHasBeenSet = true;
    m_resultItems = std::forward<ResultItemsT>(value);
  }
  template <typename ResultItemsT = Aws::Vector<ReverseGeocodeResultItem>>
  ReverseGeocodeResult& WithResultItems(ResultItemsT&& value) {
    SetResultItems(std::forward<ResultItemsT>(value));
    return *this;
  }
  template <typename ResultItemsT = ReverseGeocodeResultItem>
  ReverseGeocodeResult& AddResultItems(ResultItemsT&& value) {
    m_resultItemsHasBeenSet = true;
    m_resultItems.emplace_back(std::forward<ResultItemsT>(value));
    return *this;
  }
  ///@}

  ///@{

  inline const Aws::String& GetRequestId() const { return m_requestId; }
  template <typename RequestIdT = Aws::String>
  void SetRequestId(RequestIdT&& value) {
    m_requestIdHasBeenSet = true;
    m_requestId = std::forward<RequestIdT>(value);
  }
  template <typename RequestIdT = Aws::String>
  ReverseGeocodeResult& WithRequestId(RequestIdT&& value) {
    SetRequestId(std::forward<RequestIdT>(value));
    return *this;
  }
  ///@}
  inline Aws::Http::HttpResponseCode GetHttpResponseCode() const { return m_HttpResponseCode; }

 private:
  Aws::String m_pricingBucket;

  Aws::Vector<ReverseGeocodeResultItem> m_resultItems;

  Aws::String m_requestId;
  Aws::Http::HttpResponseCode m_HttpResponseCode;
  bool m_pricingBucketHasBeenSet = false;
  bool m_resultItemsHasBeenSet = false;
  bool m_requestIdHasBeenSet = false;
};

}  // namespace Model
}  // namespace GeoPlaces
}  // namespace Aws
