{
  "Comment": "Handles parsing a JSON document and ingesting information from it into the Orchard",
  "StartAt": "CheckForSentinelFile",
  "States": {
    "CheckForSentinelFile": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.detail.requestParameters.key",
          "StringMatches": "*/*.json",
          "Next": "ParseSmeMarketingData"
        }
      ],
      "Default": "FailState"
    },
    "ParseSmeMarketingData": {
      "Type": "Task",
      "Resource": "${lambda_parse_sme_marketing_arn}",
      "Parameters": {
        "bucket.$": "$.detail.requestParameters.bucketName",
        "key.$": "$.detail.requestParameters.key"
      },
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": 3600,
      "Retry": [{
        "ErrorEquals": ["States.Timeout"],
        "IntervalSeconds": 60,
        "MaxAttempts": 5,
        "BackoffRate": 2.0
      }],
      "Next": "PostParseChoices"
    },
    "PostParseChoices": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.split_complete",
          "IsPresent": true,
          "Next": "SuccessState"
        }
      ],
      "Default": "ProcessData"
    },
    "ProcessData": {
      "Type": "Map",
      "InputPath": "$",
      "ItemsPath": "$.items",
      "Parameters": {
        "key.$": "$.key",
        "bucket.$": "$.bucket",
        "item_index.$": "$$.Map.Item.Value"
      },
      "MaxConcurrency": 20,
      "Iterator": {
        "StartAt": "LookupOrchardProduct",
        "States": {
          "LookupOrchardProduct": {
            "Type": "Task",
            "Resource": "${lambda_lookup_orchard_product_arn}",
            "HeartbeatSeconds": 60,
            "TimeoutSeconds": 3600,
            "Retry": [{
              "ErrorEquals": [
                "States.Timeout",
                "Lambda.ServiceException",
                "Lambda.AWSLambdaException",
                "Lambda.SdkClientException",
                "Lambda.TooManyRequestsException"
              ],
              "IntervalSeconds": 5,
              "MaxAttempts": 5,
              "BackoffRate": 3.0
            }],
            "Catch": [
              {
                "ErrorEquals": [
                  "States.ALL"
                ],
                "Next": "CatchLookupError",
                "ResultPath": "$.errors"
              }
            ],
            "Next": "ProcessMarketingData"
          },
          "CatchLookupError": {
            "Type": "Succeed"
          },
          "ProcessMarketingData": {
            "Type": "Parallel",
            "Branches": [
              {
                "StartAt": "ProcessProductStoreLinks",
                "States": {
                  "ProcessProductStoreLinks": {
                    "Type": "Task",
                    "Resource": "${lambda_import_store_links_arn}",
                    "HeartbeatSeconds": 60,
                    "TimeoutSeconds": 3600,
                    "Retry": [{
                      "ErrorEquals": [
                        "States.Timeout",
                        "Lambda.ServiceException",
                        "Lambda.AWSLambdaException",
                        "Lambda.SdkClientException",
                        "Lambda.TooManyRequestsException"
                      ],
                      "IntervalSeconds": 5,
                      "MaxAttempts": 5,
                      "BackoffRate": 3.0
                    }],
                    "Catch": [
                      {
                        "ErrorEquals": [
                          "States.ALL"
                        ],
                        "Next": "StoreLinkFinishState"
                      }
                    ],
                    "End": true
                  },
                  "StoreLinkFinishState": {
                    "Type": "Succeed"
                  }
                }
              },
              {
                "StartAt": "ProcessDeliveryHistory",
                "States": {
                  "ProcessDeliveryHistory": {
                    "Type": "Task",
                    "Resource": "${lambda_import_delivery_history_arn}",
                    "HeartbeatSeconds": 60,
                    "TimeoutSeconds": 3600,
                    "Retry": [{
                      "ErrorEquals": [
                        "States.Timeout",
                        "Lambda.ServiceException",
                        "Lambda.AWSLambdaException",
                        "Lambda.SdkClientException",
                        "Lambda.TooManyRequestsException"
                      ],
                      "IntervalSeconds": 5,
                      "MaxAttempts": 5,
                      "BackoffRate": 3.0
                    }],
                    "Catch": [
                      {
                        "ErrorEquals": [
                          "States.ALL"
                        ],
                        "Next": "DeliveryHistoryFinishState"
                      }
                    ],
                    "End": true
                  },
                  "DeliveryHistoryFinishState": {
                    "Type": "Succeed"
                  }
                }
              }
            ],
            "End": true
          }
        }
      },
      "End": true
    },
    "FailState": {
      "Type": "Fail"
    },
    "SuccessState": {
      "Type": "Succeed"
    }
  }
}
