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

#include <aws/quicksight/model/PivotTableOptions.h>
#include <aws/core/utils/json/JsonSerializer.h>

#include <utility>

using namespace Aws::Utils::Json;
using namespace Aws::Utils;

namespace Aws
{
namespace QuickSight
{
namespace Model
{

PivotTableOptions::PivotTableOptions() : 
    m_metricPlacement(PivotTableMetricPlacement::NOT_SET),
    m_metricPlacementHasBeenSet(false),
    m_singleMetricVisibility(Visibility::NOT_SET),
    m_singleMetricVisibilityHasBeenSet(false),
    m_columnNamesVisibility(Visibility::NOT_SET),
    m_columnNamesVisibilityHasBeenSet(false),
    m_toggleButtonsVisibility(Visibility::NOT_SET),
    m_toggleButtonsVisibilityHasBeenSet(false),
    m_columnHeaderStyleHasBeenSet(false),
    m_rowHeaderStyleHasBeenSet(false),
    m_cellStyleHasBeenSet(false),
    m_rowFieldNamesStyleHasBeenSet(false),
    m_rowAlternateColorOptionsHasBeenSet(false),
    m_collapsedRowDimensionsVisibility(Visibility::NOT_SET),
    m_collapsedRowDimensionsVisibilityHasBeenSet(false)
{
}

PivotTableOptions::PivotTableOptions(JsonView jsonValue) : 
    m_metricPlacement(PivotTableMetricPlacement::NOT_SET),
    m_metricPlacementHasBeenSet(false),
    m_singleMetricVisibility(Visibility::NOT_SET),
    m_singleMetricVisibilityHasBeenSet(false),
    m_columnNamesVisibility(Visibility::NOT_SET),
    m_columnNamesVisibilityHasBeenSet(false),
    m_toggleButtonsVisibility(Visibility::NOT_SET),
    m_toggleButtonsVisibilityHasBeenSet(false),
    m_columnHeaderStyleHasBeenSet(false),
    m_rowHeaderStyleHasBeenSet(false),
    m_cellStyleHasBeenSet(false),
    m_rowFieldNamesStyleHasBeenSet(false),
    m_rowAlternateColorOptionsHasBeenSet(false),
    m_collapsedRowDimensionsVisibility(Visibility::NOT_SET),
    m_collapsedRowDimensionsVisibilityHasBeenSet(false)
{
  *this = jsonValue;
}

PivotTableOptions& PivotTableOptions::operator =(JsonView jsonValue)
{
  if(jsonValue.ValueExists("MetricPlacement"))
  {
    m_metricPlacement = PivotTableMetricPlacementMapper::GetPivotTableMetricPlacementForName(jsonValue.GetString("MetricPlacement"));

    m_metricPlacementHasBeenSet = true;
  }

  if(jsonValue.ValueExists("SingleMetricVisibility"))
  {
    m_singleMetricVisibility = VisibilityMapper::GetVisibilityForName(jsonValue.GetString("SingleMetricVisibility"));

    m_singleMetricVisibilityHasBeenSet = true;
  }

  if(jsonValue.ValueExists("ColumnNamesVisibility"))
  {
    m_columnNamesVisibility = VisibilityMapper::GetVisibilityForName(jsonValue.GetString("ColumnNamesVisibility"));

    m_columnNamesVisibilityHasBeenSet = true;
  }

  if(jsonValue.ValueExists("ToggleButtonsVisibility"))
  {
    m_toggleButtonsVisibility = VisibilityMapper::GetVisibilityForName(jsonValue.GetString("ToggleButtonsVisibility"));

    m_toggleButtonsVisibilityHasBeenSet = true;
  }

  if(jsonValue.ValueExists("ColumnHeaderStyle"))
  {
    m_columnHeaderStyle = jsonValue.GetObject("ColumnHeaderStyle");

    m_columnHeaderStyleHasBeenSet = true;
  }

  if(jsonValue.ValueExists("RowHeaderStyle"))
  {
    m_rowHeaderStyle = jsonValue.GetObject("RowHeaderStyle");

    m_rowHeaderStyleHasBeenSet = true;
  }

  if(jsonValue.ValueExists("CellStyle"))
  {
    m_cellStyle = jsonValue.GetObject("CellStyle");

    m_cellStyleHasBeenSet = true;
  }

  if(jsonValue.ValueExists("RowFieldNamesStyle"))
  {
    m_rowFieldNamesStyle = jsonValue.GetObject("RowFieldNamesStyle");

    m_rowFieldNamesStyleHasBeenSet = true;
  }

  if(jsonValue.ValueExists("RowAlternateColorOptions"))
  {
    m_rowAlternateColorOptions = jsonValue.GetObject("RowAlternateColorOptions");

    m_rowAlternateColorOptionsHasBeenSet = true;
  }

  if(jsonValue.ValueExists("CollapsedRowDimensionsVisibility"))
  {
    m_collapsedRowDimensionsVisibility = VisibilityMapper::GetVisibilityForName(jsonValue.GetString("CollapsedRowDimensionsVisibility"));

    m_collapsedRowDimensionsVisibilityHasBeenSet = true;
  }

  return *this;
}

JsonValue PivotTableOptions::Jsonize() const
{
  JsonValue payload;

  if(m_metricPlacementHasBeenSet)
  {
   payload.WithString("MetricPlacement", PivotTableMetricPlacementMapper::GetNameForPivotTableMetricPlacement(m_metricPlacement));
  }

  if(m_singleMetricVisibilityHasBeenSet)
  {
   payload.WithString("SingleMetricVisibility", VisibilityMapper::GetNameForVisibility(m_singleMetricVisibility));
  }

  if(m_columnNamesVisibilityHasBeenSet)
  {
   payload.WithString("ColumnNamesVisibility", VisibilityMapper::GetNameForVisibility(m_columnNamesVisibility));
  }

  if(m_toggleButtonsVisibilityHasBeenSet)
  {
   payload.WithString("ToggleButtonsVisibility", VisibilityMapper::GetNameForVisibility(m_toggleButtonsVisibility));
  }

  if(m_columnHeaderStyleHasBeenSet)
  {
   payload.WithObject("ColumnHeaderStyle", m_columnHeaderStyle.Jsonize());

  }

  if(m_rowHeaderStyleHasBeenSet)
  {
   payload.WithObject("RowHeaderStyle", m_rowHeaderStyle.Jsonize());

  }

  if(m_cellStyleHasBeenSet)
  {
   payload.WithObject("CellStyle", m_cellStyle.Jsonize());

  }

  if(m_rowFieldNamesStyleHasBeenSet)
  {
   payload.WithObject("RowFieldNamesStyle", m_rowFieldNamesStyle.Jsonize());

  }

  if(m_rowAlternateColorOptionsHasBeenSet)
  {
   payload.WithObject("RowAlternateColorOptions", m_rowAlternateColorOptions.Jsonize());

  }

  if(m_collapsedRowDimensionsVisibilityHasBeenSet)
  {
   payload.WithString("CollapsedRowDimensionsVisibility", VisibilityMapper::GetNameForVisibility(m_collapsedRowDimensionsVisibility));
  }

  return payload;
}

} // namespace Model
} // namespace QuickSight
} // namespace Aws