{
  "Comment": "Asset Transcoder State Machine",
  "StartAt": "Acknowledge",
  "States": {
    "Acknowledge": {
      "Type": "Task",
      "Resource": "${acknowledge_lambda_arn}",
      "Retry": [
        {
          "ErrorEquals": ["States.ALL"],
          "IntervalSeconds": 1,
          "MaxAttempts": 3
        }
      ],
      "Next": "EncodingRoute"
    },
    "EncodingRoute": {
      "Type": "Task",
      "Resource": "${encoding_route_lambda_arn}",
      "Retry": [
        {
          "ErrorEquals": ["States.ALL"],
          "IntervalSeconds": 1,
          "MaxAttempts": 3
        }
      ],
      "Next": "ChoiceTranscoding"
    },
    "ChoiceTranscoding": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.transcoding_type",
          "StringEquals": "audio",
          "Next": "AudioValidation"
        },
        {
          "Variable": "$.transcoding_type",
          "StringEquals": "image",
          "Next": "ImageValidation"
        }
      ],
      "Default": "UnknownTranscodingType"
    },
    "UnknownTranscodingType": {
      "Type": "Fail",
      "Cause": "Unknown transcoding type."
    },
    "AudioValidation": {
      "Type": "Task",
      "Resource": "${audio_validation_lambda_arn}",
      "Retry": [
        {
          "ErrorEquals": ["InvalidAudioError", "InvalidAudioChannels"],
          "MaxAttempts": 0
        },
        {
          "ErrorEquals": ["States.ALL"],
          "IntervalSeconds": 1,
          "MaxAttempts": 3
        }
      ],
      "Next": "AudioWaveform"
    },
    "AudioWaveform": {
      "Type": "Task",
      "Resource": "${audio_waveform_lambda_arn}",
      "Retry": [
        {
          "ErrorEquals": ["States.ALL"],
          "IntervalSeconds": 1,
          "MaxAttempts": 3
        }
      ],
      "End": true
    },
    "ImageValidation": {
      "Type": "Task",
      "Resource": "${image_validation_lambda_arn}",
      "Retry": [
        {
          "ErrorEquals": ["InvalidImageError", "InvalidImageColor", "InvalidImageDimensions"],
          "MaxAttempts": 0
        },
        {
          "ErrorEquals": ["States.ALL"],
          "IntervalSeconds": 1,
          "MaxAttempts": 3
        }
      ],
      "Next": "ImageEncoding"
    },
    "ImageEncoding": {
      "Type": "Task",
      "Resource": "${image_encoding_lambda_arn}",
      "Retry": [
        {
          "ErrorEquals": ["States.ALL"],
          "IntervalSeconds": 1,
          "MaxAttempts": 3
        }
      ],
      "End": true
    }
  }
}
