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

#include <aws/evidently/model/UpdateFeatureRequest.h>
#include <aws/core/utils/json/JsonSerializer.h>

#include <utility>

using namespace Aws::CloudWatchEvidently::Model;
using namespace Aws::Utils::Json;
using namespace Aws::Utils;

UpdateFeatureRequest::UpdateFeatureRequest() : 
    m_addOrUpdateVariationsHasBeenSet(false),
    m_defaultVariationHasBeenSet(false),
    m_descriptionHasBeenSet(false),
    m_entityOverridesHasBeenSet(false),
    m_evaluationStrategy(FeatureEvaluationStrategy::NOT_SET),
    m_evaluationStrategyHasBeenSet(false),
    m_featureHasBeenSet(false),
    m_projectHasBeenSet(false),
    m_removeVariationsHasBeenSet(false)
{
}

Aws::String UpdateFeatureRequest::SerializePayload() const
{
  JsonValue payload;

  if(m_addOrUpdateVariationsHasBeenSet)
  {
   Aws::Utils::Array<JsonValue> addOrUpdateVariationsJsonList(m_addOrUpdateVariations.size());
   for(unsigned addOrUpdateVariationsIndex = 0; addOrUpdateVariationsIndex < addOrUpdateVariationsJsonList.GetLength(); ++addOrUpdateVariationsIndex)
   {
     addOrUpdateVariationsJsonList[addOrUpdateVariationsIndex].AsObject(m_addOrUpdateVariations[addOrUpdateVariationsIndex].Jsonize());
   }
   payload.WithArray("addOrUpdateVariations", std::move(addOrUpdateVariationsJsonList));

  }

  if(m_defaultVariationHasBeenSet)
  {
   payload.WithString("defaultVariation", m_defaultVariation);

  }

  if(m_descriptionHasBeenSet)
  {
   payload.WithString("description", m_description);

  }

  if(m_entityOverridesHasBeenSet)
  {
   JsonValue entityOverridesJsonMap;
   for(auto& entityOverridesItem : m_entityOverrides)
   {
     entityOverridesJsonMap.WithString(entityOverridesItem.first, entityOverridesItem.second);
   }
   payload.WithObject("entityOverrides", std::move(entityOverridesJsonMap));

  }

  if(m_evaluationStrategyHasBeenSet)
  {
   payload.WithString("evaluationStrategy", FeatureEvaluationStrategyMapper::GetNameForFeatureEvaluationStrategy(m_evaluationStrategy));
  }

  if(m_removeVariationsHasBeenSet)
  {
   Aws::Utils::Array<JsonValue> removeVariationsJsonList(m_removeVariations.size());
   for(unsigned removeVariationsIndex = 0; removeVariationsIndex < removeVariationsJsonList.GetLength(); ++removeVariationsIndex)
   {
     removeVariationsJsonList[removeVariationsIndex].AsString(m_removeVariations[removeVariationsIndex]);
   }
   payload.WithArray("removeVariations", std::move(removeVariationsJsonList));

  }

  return payload.View().WriteReadable();
}