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

#pragma once
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/core/utils/memory/stl/AWSVector.h>
#include <aws/route53resolver/Route53Resolver_EXPORTS.h>
#include <aws/route53resolver/model/ResolverQueryLogConfigAssociation.h>

#include <utility>

namespace Aws {
template <typename RESULT_TYPE>
class AmazonWebServiceResult;

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

  ///@{
  /**
   * <p>If there are more than <code>MaxResults</code> query logging associations,
   * you can submit another <code>ListResolverQueryLogConfigAssociations</code>
   * request to get the next group of associations. In the next request, specify the
   * value of <code>NextToken</code> from the previous response. </p>
   */
  inline const Aws::String& GetNextToken() const { return m_nextToken; }
  template <typename NextTokenT = Aws::String>
  void SetNextToken(NextTokenT&& value) {
    m_nextTokenHasBeenSet = true;
    m_nextToken = std::forward<NextTokenT>(value);
  }
  template <typename NextTokenT = Aws::String>
  ListResolverQueryLogConfigAssociationsResult& WithNextToken(NextTokenT&& value) {
    SetNextToken(std::forward<NextTokenT>(value));
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>The total number of query logging associations that were created by the
   * current account in the specified Region. This count can differ from the number
   * of associations that are returned in a
   * <code>ListResolverQueryLogConfigAssociations</code> response, depending on the
   * values that you specify in the request.</p>
   */
  inline int GetTotalCount() const { return m_totalCount; }
  inline void SetTotalCount(int value) {
    m_totalCountHasBeenSet = true;
    m_totalCount = value;
  }
  inline ListResolverQueryLogConfigAssociationsResult& WithTotalCount(int value) {
    SetTotalCount(value);
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>The total number of query logging associations that were created by the
   * current account in the specified Region and that match the filters that were
   * specified in the <code>ListResolverQueryLogConfigAssociations</code> request.
   * For the total number of associations that were created by the current account in
   * the specified Region, see <code>TotalCount</code>.</p>
   */
  inline int GetTotalFilteredCount() const { return m_totalFilteredCount; }
  inline void SetTotalFilteredCount(int value) {
    m_totalFilteredCountHasBeenSet = true;
    m_totalFilteredCount = value;
  }
  inline ListResolverQueryLogConfigAssociationsResult& WithTotalFilteredCount(int value) {
    SetTotalFilteredCount(value);
    return *this;
  }
  ///@}

  ///@{
  /**
   * <p>A list that contains one <code>ResolverQueryLogConfigAssociations</code>
   * element for each query logging association that matches the values that you
   * specified for <code>Filter</code>.</p>
   */
  inline const Aws::Vector<ResolverQueryLogConfigAssociation>& GetResolverQueryLogConfigAssociations() const {
    return m_resolverQueryLogConfigAssociations;
  }
  template <typename ResolverQueryLogConfigAssociationsT = Aws::Vector<ResolverQueryLogConfigAssociation>>
  void SetResolverQueryLogConfigAssociations(ResolverQueryLogConfigAssociationsT&& value) {
    m_resolverQueryLogConfigAssociationsHasBeenSet = true;
    m_resolverQueryLogConfigAssociations = std::forward<ResolverQueryLogConfigAssociationsT>(value);
  }
  template <typename ResolverQueryLogConfigAssociationsT = Aws::Vector<ResolverQueryLogConfigAssociation>>
  ListResolverQueryLogConfigAssociationsResult& WithResolverQueryLogConfigAssociations(ResolverQueryLogConfigAssociationsT&& value) {
    SetResolverQueryLogConfigAssociations(std::forward<ResolverQueryLogConfigAssociationsT>(value));
    return *this;
  }
  template <typename ResolverQueryLogConfigAssociationsT = ResolverQueryLogConfigAssociation>
  ListResolverQueryLogConfigAssociationsResult& AddResolverQueryLogConfigAssociations(ResolverQueryLogConfigAssociationsT&& value) {
    m_resolverQueryLogConfigAssociationsHasBeenSet = true;
    m_resolverQueryLogConfigAssociations.emplace_back(std::forward<ResolverQueryLogConfigAssociationsT>(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>
  ListResolverQueryLogConfigAssociationsResult& WithRequestId(RequestIdT&& value) {
    SetRequestId(std::forward<RequestIdT>(value));
    return *this;
  }
  ///@}
 private:
  Aws::String m_nextToken;

  int m_totalCount{0};

  int m_totalFilteredCount{0};

  Aws::Vector<ResolverQueryLogConfigAssociation> m_resolverQueryLogConfigAssociations;

  Aws::String m_requestId;
  bool m_nextTokenHasBeenSet = false;
  bool m_totalCountHasBeenSet = false;
  bool m_totalFilteredCountHasBeenSet = false;
  bool m_resolverQueryLogConfigAssociationsHasBeenSet = false;
  bool m_requestIdHasBeenSet = false;
};

}  // namespace Model
}  // namespace Route53Resolver
}  // namespace Aws
