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

#include <aws/cloudfront/model/RealtimeLogConfig.h>
#include <aws/core/utils/xml/XmlSerializer.h>
#include <aws/core/utils/StringUtils.h>
#include <aws/core/utils/memory/stl/AWSStringStream.h>

#include <utility>

using namespace Aws::Utils::Xml;
using namespace Aws::Utils;

namespace Aws
{
namespace CloudFront
{
namespace Model
{

RealtimeLogConfig::RealtimeLogConfig() : 
    m_aRNHasBeenSet(false),
    m_nameHasBeenSet(false),
    m_samplingRate(0),
    m_samplingRateHasBeenSet(false),
    m_endPointsHasBeenSet(false),
    m_fieldsHasBeenSet(false)
{
}

RealtimeLogConfig::RealtimeLogConfig(const XmlNode& xmlNode) : 
    m_aRNHasBeenSet(false),
    m_nameHasBeenSet(false),
    m_samplingRate(0),
    m_samplingRateHasBeenSet(false),
    m_endPointsHasBeenSet(false),
    m_fieldsHasBeenSet(false)
{
  *this = xmlNode;
}

RealtimeLogConfig& RealtimeLogConfig::operator =(const XmlNode& xmlNode)
{
  XmlNode resultNode = xmlNode;

  if(!resultNode.IsNull())
  {
    XmlNode aRNNode = resultNode.FirstChild("ARN");
    if(!aRNNode.IsNull())
    {
      m_aRN = Aws::Utils::Xml::DecodeEscapedXmlText(aRNNode.GetText());
      m_aRNHasBeenSet = true;
    }
    XmlNode nameNode = resultNode.FirstChild("Name");
    if(!nameNode.IsNull())
    {
      m_name = Aws::Utils::Xml::DecodeEscapedXmlText(nameNode.GetText());
      m_nameHasBeenSet = true;
    }
    XmlNode samplingRateNode = resultNode.FirstChild("SamplingRate");
    if(!samplingRateNode.IsNull())
    {
      m_samplingRate = StringUtils::ConvertToInt64(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(samplingRateNode.GetText()).c_str()).c_str());
      m_samplingRateHasBeenSet = true;
    }
    XmlNode endPointsNode = resultNode.FirstChild("EndPoints");
    if(!endPointsNode.IsNull())
    {
      XmlNode endPointsMember = endPointsNode.FirstChild("member");
      while(!endPointsMember.IsNull())
      {
        m_endPoints.push_back(endPointsMember);
        endPointsMember = endPointsMember.NextNode("member");
      }

      m_endPointsHasBeenSet = true;
    }
    XmlNode fieldsNode = resultNode.FirstChild("Fields");
    if(!fieldsNode.IsNull())
    {
      XmlNode fieldsMember = fieldsNode.FirstChild("Field");
      while(!fieldsMember.IsNull())
      {
        m_fields.push_back(fieldsMember.GetText());
        fieldsMember = fieldsMember.NextNode("Field");
      }

      m_fieldsHasBeenSet = true;
    }
  }

  return *this;
}

void RealtimeLogConfig::AddToNode(XmlNode& parentNode) const
{
  Aws::StringStream ss;
  if(m_aRNHasBeenSet)
  {
   XmlNode aRNNode = parentNode.CreateChildElement("ARN");
   aRNNode.SetText(m_aRN);
  }

  if(m_nameHasBeenSet)
  {
   XmlNode nameNode = parentNode.CreateChildElement("Name");
   nameNode.SetText(m_name);
  }

  if(m_samplingRateHasBeenSet)
  {
   XmlNode samplingRateNode = parentNode.CreateChildElement("SamplingRate");
   ss << m_samplingRate;
   samplingRateNode.SetText(ss.str());
   ss.str("");
  }

  if(m_endPointsHasBeenSet)
  {
   XmlNode endPointsParentNode = parentNode.CreateChildElement("EndPoints");
   for(const auto& item : m_endPoints)
   {
     XmlNode endPointsNode = endPointsParentNode.CreateChildElement("EndPoint");
     item.AddToNode(endPointsNode);
   }
  }

  if(m_fieldsHasBeenSet)
  {
   XmlNode fieldsParentNode = parentNode.CreateChildElement("Fields");
   for(const auto& item : m_fields)
   {
     XmlNode fieldsNode = fieldsParentNode.CreateChildElement("Field");
     fieldsNode.SetText(item);
   }
  }

}

} // namespace Model
} // namespace CloudFront
} // namespace Aws