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

#include <aws/securityhub/model/StandardsControlAssociationDetail.h>
#include <aws/core/utils/json/JsonSerializer.h>

#include <utility>

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

namespace Aws
{
namespace SecurityHub
{
namespace Model
{

StandardsControlAssociationDetail::StandardsControlAssociationDetail() : 
    m_standardsArnHasBeenSet(false),
    m_securityControlIdHasBeenSet(false),
    m_securityControlArnHasBeenSet(false),
    m_associationStatus(AssociationStatus::NOT_SET),
    m_associationStatusHasBeenSet(false),
    m_relatedRequirementsHasBeenSet(false),
    m_updatedAtHasBeenSet(false),
    m_updatedReasonHasBeenSet(false),
    m_standardsControlTitleHasBeenSet(false),
    m_standardsControlDescriptionHasBeenSet(false),
    m_standardsControlArnsHasBeenSet(false)
{
}

StandardsControlAssociationDetail::StandardsControlAssociationDetail(JsonView jsonValue) : 
    m_standardsArnHasBeenSet(false),
    m_securityControlIdHasBeenSet(false),
    m_securityControlArnHasBeenSet(false),
    m_associationStatus(AssociationStatus::NOT_SET),
    m_associationStatusHasBeenSet(false),
    m_relatedRequirementsHasBeenSet(false),
    m_updatedAtHasBeenSet(false),
    m_updatedReasonHasBeenSet(false),
    m_standardsControlTitleHasBeenSet(false),
    m_standardsControlDescriptionHasBeenSet(false),
    m_standardsControlArnsHasBeenSet(false)
{
  *this = jsonValue;
}

StandardsControlAssociationDetail& StandardsControlAssociationDetail::operator =(JsonView jsonValue)
{
  if(jsonValue.ValueExists("StandardsArn"))
  {
    m_standardsArn = jsonValue.GetString("StandardsArn");

    m_standardsArnHasBeenSet = true;
  }

  if(jsonValue.ValueExists("SecurityControlId"))
  {
    m_securityControlId = jsonValue.GetString("SecurityControlId");

    m_securityControlIdHasBeenSet = true;
  }

  if(jsonValue.ValueExists("SecurityControlArn"))
  {
    m_securityControlArn = jsonValue.GetString("SecurityControlArn");

    m_securityControlArnHasBeenSet = true;
  }

  if(jsonValue.ValueExists("AssociationStatus"))
  {
    m_associationStatus = AssociationStatusMapper::GetAssociationStatusForName(jsonValue.GetString("AssociationStatus"));

    m_associationStatusHasBeenSet = true;
  }

  if(jsonValue.ValueExists("RelatedRequirements"))
  {
    Aws::Utils::Array<JsonView> relatedRequirementsJsonList = jsonValue.GetArray("RelatedRequirements");
    for(unsigned relatedRequirementsIndex = 0; relatedRequirementsIndex < relatedRequirementsJsonList.GetLength(); ++relatedRequirementsIndex)
    {
      m_relatedRequirements.push_back(relatedRequirementsJsonList[relatedRequirementsIndex].AsString());
    }
    m_relatedRequirementsHasBeenSet = true;
  }

  if(jsonValue.ValueExists("UpdatedAt"))
  {
    m_updatedAt = jsonValue.GetString("UpdatedAt");

    m_updatedAtHasBeenSet = true;
  }

  if(jsonValue.ValueExists("UpdatedReason"))
  {
    m_updatedReason = jsonValue.GetString("UpdatedReason");

    m_updatedReasonHasBeenSet = true;
  }

  if(jsonValue.ValueExists("StandardsControlTitle"))
  {
    m_standardsControlTitle = jsonValue.GetString("StandardsControlTitle");

    m_standardsControlTitleHasBeenSet = true;
  }

  if(jsonValue.ValueExists("StandardsControlDescription"))
  {
    m_standardsControlDescription = jsonValue.GetString("StandardsControlDescription");

    m_standardsControlDescriptionHasBeenSet = true;
  }

  if(jsonValue.ValueExists("StandardsControlArns"))
  {
    Aws::Utils::Array<JsonView> standardsControlArnsJsonList = jsonValue.GetArray("StandardsControlArns");
    for(unsigned standardsControlArnsIndex = 0; standardsControlArnsIndex < standardsControlArnsJsonList.GetLength(); ++standardsControlArnsIndex)
    {
      m_standardsControlArns.push_back(standardsControlArnsJsonList[standardsControlArnsIndex].AsString());
    }
    m_standardsControlArnsHasBeenSet = true;
  }

  return *this;
}

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

  if(m_standardsArnHasBeenSet)
  {
   payload.WithString("StandardsArn", m_standardsArn);

  }

  if(m_securityControlIdHasBeenSet)
  {
   payload.WithString("SecurityControlId", m_securityControlId);

  }

  if(m_securityControlArnHasBeenSet)
  {
   payload.WithString("SecurityControlArn", m_securityControlArn);

  }

  if(m_associationStatusHasBeenSet)
  {
   payload.WithString("AssociationStatus", AssociationStatusMapper::GetNameForAssociationStatus(m_associationStatus));
  }

  if(m_relatedRequirementsHasBeenSet)
  {
   Aws::Utils::Array<JsonValue> relatedRequirementsJsonList(m_relatedRequirements.size());
   for(unsigned relatedRequirementsIndex = 0; relatedRequirementsIndex < relatedRequirementsJsonList.GetLength(); ++relatedRequirementsIndex)
   {
     relatedRequirementsJsonList[relatedRequirementsIndex].AsString(m_relatedRequirements[relatedRequirementsIndex]);
   }
   payload.WithArray("RelatedRequirements", std::move(relatedRequirementsJsonList));

  }

  if(m_updatedAtHasBeenSet)
  {
   payload.WithString("UpdatedAt", m_updatedAt.ToGmtString(Aws::Utils::DateFormat::ISO_8601));
  }

  if(m_updatedReasonHasBeenSet)
  {
   payload.WithString("UpdatedReason", m_updatedReason);

  }

  if(m_standardsControlTitleHasBeenSet)
  {
   payload.WithString("StandardsControlTitle", m_standardsControlTitle);

  }

  if(m_standardsControlDescriptionHasBeenSet)
  {
   payload.WithString("StandardsControlDescription", m_standardsControlDescription);

  }

  if(m_standardsControlArnsHasBeenSet)
  {
   Aws::Utils::Array<JsonValue> standardsControlArnsJsonList(m_standardsControlArns.size());
   for(unsigned standardsControlArnsIndex = 0; standardsControlArnsIndex < standardsControlArnsJsonList.GetLength(); ++standardsControlArnsIndex)
   {
     standardsControlArnsJsonList[standardsControlArnsIndex].AsString(m_standardsControlArns[standardsControlArnsIndex]);
   }
   payload.WithArray("StandardsControlArns", std::move(standardsControlArnsJsonList));

  }

  return payload;
}

} // namespace Model
} // namespace SecurityHub
} // namespace Aws