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

#include <aws/lex/model/PostContentResult.h>
#include <aws/core/AmazonWebServiceResult.h>
#include <aws/core/utils/StringUtils.h>
#include <aws/core/utils/memory/stl/AWSStringStream.h>
#include <aws/core/utils/HashingUtils.h>

#include <utility>

using namespace Aws::LexRuntimeService::Model;
using namespace Aws::Utils::Stream;
using namespace Aws::Utils;
using namespace Aws;

PostContentResult::PostContentResult() : 
    m_messageFormat(MessageFormatType::NOT_SET),
    m_dialogState(DialogState::NOT_SET)
{
}

PostContentResult::PostContentResult(PostContentResult&& toMove) : 
    m_contentType(std::move(toMove.m_contentType)),
    m_intentName(std::move(toMove.m_intentName)),
    m_nluIntentConfidence(std::move(toMove.m_nluIntentConfidence)),
    m_alternativeIntents(std::move(toMove.m_alternativeIntents)),
    m_slots(std::move(toMove.m_slots)),
    m_sessionAttributes(std::move(toMove.m_sessionAttributes)),
    m_sentimentResponse(std::move(toMove.m_sentimentResponse)),
    m_encodedMessage(std::move(toMove.m_encodedMessage)),
    m_messageFormat(toMove.m_messageFormat),
    m_dialogState(toMove.m_dialogState),
    m_slotToElicit(std::move(toMove.m_slotToElicit)),
    m_encodedInputTranscript(std::move(toMove.m_encodedInputTranscript)),
    m_audioStream(std::move(toMove.m_audioStream)),
    m_botVersion(std::move(toMove.m_botVersion)),
    m_sessionId(std::move(toMove.m_sessionId)),
    m_activeContexts(std::move(toMove.m_activeContexts)),
    m_requestId(std::move(toMove.m_requestId))
{
}

PostContentResult& PostContentResult::operator=(PostContentResult&& toMove)
{
   if(this == &toMove)
   {
      return *this;
   }

   m_contentType = std::move(toMove.m_contentType);
   m_intentName = std::move(toMove.m_intentName);
   m_nluIntentConfidence = std::move(toMove.m_nluIntentConfidence);
   m_alternativeIntents = std::move(toMove.m_alternativeIntents);
   m_slots = std::move(toMove.m_slots);
   m_sessionAttributes = std::move(toMove.m_sessionAttributes);
   m_sentimentResponse = std::move(toMove.m_sentimentResponse);
   m_encodedMessage = std::move(toMove.m_encodedMessage);
   m_messageFormat = toMove.m_messageFormat;
   m_dialogState = toMove.m_dialogState;
   m_slotToElicit = std::move(toMove.m_slotToElicit);
   m_encodedInputTranscript = std::move(toMove.m_encodedInputTranscript);
   m_audioStream = std::move(toMove.m_audioStream);
   m_botVersion = std::move(toMove.m_botVersion);
   m_sessionId = std::move(toMove.m_sessionId);
   m_activeContexts = std::move(toMove.m_activeContexts);
   m_requestId = std::move(toMove.m_requestId);

   return *this;
}

PostContentResult::PostContentResult(Aws::AmazonWebServiceResult<ResponseStream>&& result) : 
    m_messageFormat(MessageFormatType::NOT_SET),
    m_dialogState(DialogState::NOT_SET)
{
  *this = std::move(result);
}

PostContentResult& PostContentResult::operator =(Aws::AmazonWebServiceResult<ResponseStream>&& result)
{
  m_audioStream = result.TakeOwnershipOfPayload();

  const auto& headers = result.GetHeaderValueCollection();
  const auto& contentTypeIter = headers.find("content-type");
  if(contentTypeIter != headers.end())
  {
    m_contentType = contentTypeIter->second;
  }

  const auto& intentNameIter = headers.find("x-amz-lex-intent-name");
  if(intentNameIter != headers.end())
  {
    m_intentName = intentNameIter->second;
  }

  const auto& nluIntentConfidenceIter = headers.find("x-amz-lex-nlu-intent-confidence");
  if(nluIntentConfidenceIter != headers.end())
  {
    m_nluIntentConfidence = nluIntentConfidenceIter->second;
  }

  const auto& alternativeIntentsIter = headers.find("x-amz-lex-alternative-intents");
  if(alternativeIntentsIter != headers.end())
  {
    m_alternativeIntents = alternativeIntentsIter->second;
  }

  const auto& slotsIter = headers.find("x-amz-lex-slots");
  if(slotsIter != headers.end())
  {
    m_slots = slotsIter->second;
  }

  const auto& sessionAttributesIter = headers.find("x-amz-lex-session-attributes");
  if(sessionAttributesIter != headers.end())
  {
    m_sessionAttributes = sessionAttributesIter->second;
  }

  const auto& sentimentResponseIter = headers.find("x-amz-lex-sentiment");
  if(sentimentResponseIter != headers.end())
  {
    m_sentimentResponse = sentimentResponseIter->second;
  }

  const auto& encodedMessageIter = headers.find("x-amz-lex-encoded-message");
  if(encodedMessageIter != headers.end())
  {
    m_encodedMessage = encodedMessageIter->second;
  }

  const auto& messageFormatIter = headers.find("x-amz-lex-message-format");
  if(messageFormatIter != headers.end())
  {
    m_messageFormat = MessageFormatTypeMapper::GetMessageFormatTypeForName(messageFormatIter->second);
  }

  const auto& dialogStateIter = headers.find("x-amz-lex-dialog-state");
  if(dialogStateIter != headers.end())
  {
    m_dialogState = DialogStateMapper::GetDialogStateForName(dialogStateIter->second);
  }

  const auto& slotToElicitIter = headers.find("x-amz-lex-slot-to-elicit");
  if(slotToElicitIter != headers.end())
  {
    m_slotToElicit = slotToElicitIter->second;
  }

  const auto& encodedInputTranscriptIter = headers.find("x-amz-lex-encoded-input-transcript");
  if(encodedInputTranscriptIter != headers.end())
  {
    m_encodedInputTranscript = encodedInputTranscriptIter->second;
  }

  const auto& botVersionIter = headers.find("x-amz-lex-bot-version");
  if(botVersionIter != headers.end())
  {
    m_botVersion = botVersionIter->second;
  }

  const auto& sessionIdIter = headers.find("x-amz-lex-session-id");
  if(sessionIdIter != headers.end())
  {
    m_sessionId = sessionIdIter->second;
  }

  const auto& activeContextsIter = headers.find("x-amz-lex-active-contexts");
  if(activeContextsIter != headers.end())
  {
    m_activeContexts = activeContextsIter->second;
  }

  const auto& requestIdIter = headers.find("x-amzn-requestid");
  if(requestIdIter != headers.end())
  {
    m_requestId = requestIdIter->second;
  }

   return *this;
}