{
  "Comment": "Video approval workflow.",
  "StartAt": "StartWorkflow",
  "TimeoutSeconds": 345600,
  "States": {
    "StartWorkflow": {
      "Type": "Task",
      "Resource": "${daemon_video_start_workflow_arn}",
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": 3600,
      "Retry": [{
        "ErrorEquals": ["States.Timeout"],
        "IntervalSeconds": 60,
        "MaxAttempts": 5,
        "BackoffRate": 2.0
      }],
      "Next": "GetInputs"
    },
    "GetInputs": {
      "Type": "Parallel",
      "Next": "CreateMezzanines",
      "Branches": [
        {
          "StartAt": "GetCreateMezzaninesInputs",
          "States": {
            "GetCreateMezzaninesInputs": {
              "Type": "Task",
              "Resource": "${daemon_video_get_create_mezzanines_inputs_arn}",
              "HeartbeatSeconds": 60,
              "TimeoutSeconds": 3600,
              "Retry": [{
                "ErrorEquals": ["States.Timeout"],
                "IntervalSeconds": 60,
                "MaxAttempts": 5,
                "BackoffRate": 2.0
              }],
              "End": true
            }
          }
        },
        {
          "StartAt": "GetProductMetadata",
          "States": {
            "GetProductMetadata": {
              "Type": "Task",
              "Resource": "${daemon_video_get_product_metadata_arn}",
              "HeartbeatSeconds": 60,
              "TimeoutSeconds": 3600,
              "Retry": [{
                "ErrorEquals": ["States.Timeout"],
                "IntervalSeconds": 60,
                "MaxAttempts": 5,
                "BackoffRate": 2.0
              }],
              "End": true
            }
          }
        }
      ]
    },
    "CreateMezzanines": {
      "Type": "Task",
      "Resource": "${daemon_video_create_mezzanines_arn}",
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": 3600,
      "Retry": [{
        "ErrorEquals": ["States.Timeout"],
        "IntervalSeconds": 60,
        "MaxAttempts": 5,
        "BackoffRate": 2.0
      }],
      "Next": "CheckIfCreateMezzaninesIsDoneAfterDelay"
    },
    "CheckIfCreateMezzaninesIsDone": {
      "Type": "Task",
      "Resource": "${daemon_video_is_create_mezzanines_done_arn}",
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": 3600,
      "Retry": [{
        "ErrorEquals": ["States.Timeout"],
        "IntervalSeconds": 60,
        "MaxAttempts": 5,
        "BackoffRate": 2.0
      }],
      "Next": "ContinueOnlyIfCreateMezzaninesIsDone"
    },
    "ContinueOnlyIfCreateMezzaninesIsDone": {
      "Type" : "Choice",
      "Choices": [
        {
          "Variable": "$.is_create_mezzanines_done",
          "BooleanEquals": true,
          "Next": "ExtractProResMezzanineMetadata"
        },
        {
          "Variable": "$.is_create_mezzanines_done",
          "BooleanEquals": false,
          "Next": "CheckIfCreateMezzaninesIsDoneAfterDelay"
        }
      ]
    },
    "CheckIfCreateMezzaninesIsDoneAfterDelay": {
      "Type": "Wait",
      "Seconds": 60,
      "Next": "CheckIfCreateMezzaninesIsDone"
    },
    "ExtractProResMezzanineMetadata": {
      "Type": "Task",
      "Resource": "${daemon_video_extract_prores_mezzanine_metadata_arn}",
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": 3600,
      "Retry": [{
        "ErrorEquals": ["States.Timeout"],
        "IntervalSeconds": 60,
        "MaxAttempts": 5,
        "BackoffRate": 2.0
      }],
      "Next": "TransferOnPremises"
    },
    "TransferOnPremises": {
      "Type": "Parallel",
      "Next": "EndWorkflow",
      "Branches": [
        {
          "StartAt": "ShouldTransferProresToRipper",
          "States": {
            "ShouldTransferProresToRipper": {
              "Type" : "Choice",
              "Choices": [
                {
                  "Variable": "$.should_transfer_prores_to_ripper",
                  "BooleanEquals": true,
                  "Next": "TransferProresFromS3ToRipper"
                },
                {
                  "Variable": "$.should_transfer_prores_to_ripper",
                  "BooleanEquals": false,
                  "Next": "TransferOnlyH264IfDownloadAssetsFromS3IsEnabled"
                }
              ]
            },
            "TransferProresFromS3ToRipper": {
              "Type": "Task",
              "Resource": "${daemon_video_transfer_prores_from_s3_to_ripper_arn}",
              "HeartbeatSeconds": 60,
              "TimeoutSeconds": 3600,
              "Retry": [{
                "ErrorEquals": ["States.Timeout"],
                "IntervalSeconds": 60,
                "MaxAttempts": 5,
                "BackoffRate": 2.0
              }],
              "Next": "CheckIfRipperMezzanineProcessingIsDone"
            },
            "CheckIfRipperMezzanineProcessingIsDone": {
              "Type": "Task",
              "Resource": "${daemon_video_is_ripper_mezzanine_processing_done_arn}",
              "HeartbeatSeconds": 60,
              "TimeoutSeconds": 3600,
              "Retry": [{
                "ErrorEquals": ["States.Timeout"],
                "IntervalSeconds": 60,
                "MaxAttempts": 5,
                "BackoffRate": 2.0
              }],
              "Next": "ContinueOnlyIfRipperMezzanineProcessingIsDone"
            },
            "ContinueOnlyIfRipperMezzanineProcessingIsDone": {
              "Type" : "Choice",
              "Choices": [
                {
                  "Variable": "$.is_ripper_mezzanine_processing_done",
                  "BooleanEquals": true,
                  "Next": "TransferOnlyH264IfDownloadAssetsFromS3IsEnabled"
                },
                {
                  "Variable": "$.is_ripper_mezzanine_processing_done",
                  "BooleanEquals": false,
                  "Next": "CheckIfRipperMezzanineProcessingIsDoneAfterDelay"
                }
              ]
            },
            "CheckIfRipperMezzanineProcessingIsDoneAfterDelay": {
              "Type": "Wait",
              "Seconds": 60,
              "Next": "CheckIfRipperMezzanineProcessingIsDone"
            },
            "TransferOnlyH264IfDownloadAssetsFromS3IsEnabled": {
              "Type": "Choice",
              "Choices": [
                {
                  "Variable": "$.is_download_assets_from_s3_enabled",
                  "BooleanEquals": true,
                  "Next": "TransferH264FromS3ToRipperStorage"
                },
                {
                  "Variable": "$.is_download_assets_from_s3_enabled",
                  "BooleanEquals": false,
                  "Next": "TransferNonMezzanineAssets"
                }
              ]
            },
            "TransferH264FromS3ToRipperStorage": {
              "Type": "Task",
              "Resource": "${daemon_video_transfer_h264_from_s3_to_ripper_storage_arn}",
              "HeartbeatSeconds": 60,
              "TimeoutSeconds": 3600,
              "Retry": [{
                "ErrorEquals": ["States.Timeout"],
                "IntervalSeconds": 60,
                "MaxAttempts": 5,
                "BackoffRate": 2.0
              }],
              "End": true
            },
            "TransferNonMezzanineAssets": {
              "Type": "Parallel",
              "End": true,
              "Branches": [
                {
                  "StartAt": "TransferH264FromS3ToRipper",
                  "States": {
                    "TransferH264FromS3ToRipper": {
                      "Type": "Task",
                      "Resource": "${daemon_video_transfer_h264_from_s3_to_ripper_arn}",
                      "HeartbeatSeconds": 60,
                      "TimeoutSeconds": 3600,
                      "Retry": [{
                        "ErrorEquals": ["States.Timeout"],
                        "IntervalSeconds": 60,
                        "MaxAttempts": 5,
                        "BackoffRate": 2.0
                      }],
                      "Next": "CheckIfRipperH264ProcessingIsDoneAfterDelay"
                    },
                    "CheckIfRipperH264ProcessingIsDoneAfterDelay": {
                      "Type": "Wait",
                      "Seconds": 60,
                      "Next": "CheckIfRipperH264ProcessingIsDone"
                    },
                    "CheckIfRipperH264ProcessingIsDone": {
                      "Type": "Task",
                      "Resource": "${daemon_video_is_ripper_h264_processing_done_arn}",
                      "HeartbeatSeconds": 60,
                      "TimeoutSeconds": 3600,
                      "Retry": [{
                        "ErrorEquals": ["States.Timeout"],
                        "IntervalSeconds": 60,
                        "MaxAttempts": 5,
                        "BackoffRate": 2.0
                      }],
                      "Next": "ContinueOnlyIfRipperH264ProcessingIsDone"
                    },
                    "ContinueOnlyIfRipperH264ProcessingIsDone": {
                      "Type" : "Choice",
                      "Choices": [
                        {
                          "Variable": "$.is_ripper_h264_processing_done",
                          "BooleanEquals": true,
                          "Next": "RipperH264ProcessingSuccess"
                        },
                        {
                          "Variable": "$.is_ripper_h264_processing_done",
                          "BooleanEquals": false,
                          "Next": "CheckIfRipperH264ProcessingIsDoneAfterDelay"
                        }
                      ]
                    },
                    "RipperH264ProcessingSuccess": {
                      "Type": "Succeed"
                    }
                  }
                },
                {
                  "StartAt": "ConvertDefaultThumbnailToTIFF",
                  "States": {
                    "ConvertDefaultThumbnailToTIFF": {
                      "Type": "Task",
                      "Resource": "${daemon_video_convert_default_thumbnail_to_tiff_arn}",
                      "HeartbeatSeconds": 60,
                      "TimeoutSeconds": 3600,
                      "Retry": [{
                        "ErrorEquals": ["States.Timeout"],
                        "IntervalSeconds": 60,
                        "MaxAttempts": 5,
                        "BackoffRate": 2.0
                      }],
                      "Next": "TransferTIFFThumbnailFromS3ToRipper"
                    },
                    "TransferTIFFThumbnailFromS3ToRipper": {
                      "Type": "Task",
                      "Resource": "${daemon_video_transfer_tiff_thumbnail_from_s3_to_ripper_arn}",
                      "HeartbeatSeconds": 60,
                      "TimeoutSeconds": 3600,
                      "Retry": [{
                        "ErrorEquals": ["States.Timeout"],
                        "IntervalSeconds": 60,
                        "MaxAttempts": 5,
                        "BackoffRate": 2.0
                      }],
                      "Next": "CheckIfRipperTIFFThumbnailProcessingIsDoneAfterDelay"
                    },
                    "CheckIfRipperTIFFThumbnailProcessingIsDoneAfterDelay": {
                      "Type": "Wait",
                      "Seconds": 60,
                      "Next": "CheckIfRipperTIFFThumbnailProcessingIsDone"
                    },
                    "CheckIfRipperTIFFThumbnailProcessingIsDone": {
                      "Type": "Task",
                      "Resource": "${daemon_video_is_ripper_tiff_thumbnail_processing_done_arn}",
                      "HeartbeatSeconds": 60,
                      "TimeoutSeconds": 3600,
                      "Retry": [{
                        "ErrorEquals": ["States.Timeout"],
                        "IntervalSeconds": 60,
                        "MaxAttempts": 5,
                        "BackoffRate": 2.0
                      }],
                      "Next": "ContinueOnlyIfRipperTIFFThumbnailProcessingIsDone"
                    },
                    "ContinueOnlyIfRipperTIFFThumbnailProcessingIsDone": {
                      "Type" : "Choice",
                      "Choices": [
                        {
                          "Variable": "$.is_ripper_tiff_thumbnail_processing_done",
                          "BooleanEquals": true,
                          "Next": "RipperTIFFThumbnailProcessingSuccess"
                        },
                        {
                          "Variable": "$.is_ripper_tiff_thumbnail_processing_done",
                          "BooleanEquals": false,
                          "Next": "CheckIfRipperTIFFThumbnailProcessingIsDoneAfterDelay"
                        }
                      ]
                    },
                    "RipperTIFFThumbnailProcessingSuccess": {
                      "Type": "Succeed"
                    }
                  }
                }
              ]
            }
          }
        },
        {
          "StartAt": "ConvertAndCopyThumbnailsOnlyIfDownloadAssetsFromS3IsEnabled",
          "States": {
            "ConvertAndCopyThumbnailsOnlyIfDownloadAssetsFromS3IsEnabled": {
              "Type": "Choice",
              "Choices": [
                {
                  "Variable": "$.is_download_assets_from_s3_enabled",
                  "BooleanEquals": true,
                  "Next": "ConvertThumbnailsToTIFFs"
                },
                {
                  "Variable": "$.is_download_assets_from_s3_enabled",
                  "BooleanEquals": false,
                  "Next": "ConvertAndCopyThumbnailsOnlyIfDownloadAssetsFromS3IsEnabledNoop"
                }
              ]
            },
            "ConvertThumbnailsToTIFFs": {
              "Type": "Task",
              "Resource": "${daemon_video_convert_thumbnails_to_tiffs_arn}",
              "HeartbeatSeconds": 60,
              "TimeoutSeconds": 3600,
              "Retry": [
                {
                  "ErrorEquals": [
                    "States.Timeout"
                  ],
                  "IntervalSeconds": 60,
                  "MaxAttempts": 5,
                  "BackoffRate": 2
                }
              ],
              "Next": "WriteThumbnailLocationsToVideoAssetTable"
            },
            "ConvertAndCopyThumbnailsOnlyIfDownloadAssetsFromS3IsEnabledNoop": {
              "Type": "Pass",
              "End": true
            },
            "WriteThumbnailLocationsToVideoAssetTable": {
              "Type": "Task",
              "Resource": "${daemon_video_write_thumbnail_locations_to_video_asset_table_arn}",
              "HeartbeatSeconds": 60,
              "TimeoutSeconds": 3600,
              "Retry": [
                {
                  "ErrorEquals": [
                    "States.Timeout"
                  ],
                  "IntervalSeconds": 60,
                  "MaxAttempts": 5,
                  "BackoffRate": 2
                }
              ],
              "End": true
            }
          }
        }
      ]
    },
    "EndWorkflow": {
      "Type": "Task",
      "Resource": "${daemon_video_end_workflow_arn}",
      "HeartbeatSeconds": 60,
      "TimeoutSeconds": 3600,
      "Retry": [{
        "ErrorEquals": ["States.Timeout"],
        "IntervalSeconds": 60,
        "MaxAttempts": 5,
        "BackoffRate": 2.0
      }],
      "End": true
    }
  }
}
