# see this document: https://docs.aws.amazon.com/step-functions/latest/dg/concept-create-iam-advanced.html
resource "aws_iam_role" "video_ingestion_workflow_state_machine_role" {
  name               = "${var.environment}_video_ingestion_workflow_state_machine_role"
  assume_role_policy = data.aws_iam_policy_document.assume_statemachines_role.json
}

resource "aws_sfn_state_machine" "video_ingestion_workflow" {
  name     = "${var.environment}_${var.video_ingestion_workflow_state_machine_name}"
  role_arn = aws_iam_role.video_ingestion_workflow_state_machine_role.arn

  definition = templatefile("${path.module}/${var.video_ingestion_workflow_state_machine_definition_file}", {
    region                                                                    = var.region
    daemon_video_start_workflow_arn                                           = aws_sfn_activity.daemon_video_start_workflow.id
    daemon_video_extract_metadata_arn                                         = aws_sfn_activity.daemon_video_extract_metadata.id
    daemon_video_detect_black_intervals_at_beginning_and_end_of_video_arn     = aws_sfn_activity.daemon_video_detect_black_intervals_at_beginning_and_end_of_video.id
    daemon_video_detect_silent_intervals_at_beginning_and_end_of_audio_arn    = aws_sfn_activity.daemon_video_detect_silent_intervals_at_beginning_and_end_of_audio.id
    daemon_video_detect_video_location_and_dimensions_within_black_border_arn = aws_sfn_activity.daemon_video_detect_video_location_and_dimensions_within_black_border.id
    daemon_video_detect_max_volume_arn                                        = aws_sfn_activity.daemon_video_detect_max_volume.id
    daemon_video_calculate_audio_stats_arn                                    = aws_sfn_activity.daemon_video_calculate_audio_stats.id
    daemon_video_transfer_from_browser_to_s3_arn                              = aws_sfn_activity.daemon_video_transfer_from_browser_to_s3.id
    daemon_video_is_transfer_from_browser_to_s3_done_arn                      = aws_sfn_activity.daemon_video_is_transfer_from_browser_to_s3_done.id
    daemon_video_log_transfer_completed_arn                                   = aws_sfn_activity.daemon_video_log_transfer_completed.id
    daemon_video_log_transfer_timed_out_arn                                   = aws_sfn_activity.daemon_video_log_transfer_timed_out.id
    daemon_video_transfer_from_google_drive_to_s3_arn                         = aws_sfn_activity.daemon_video_transfer_from_google_drive_to_s3.id
    daemon_video_transfer_from_dropbox_to_s3_arn                              = aws_sfn_activity.daemon_video_transfer_from_dropbox_to_s3.id
    daemon_video_transfer_from_s3_to_s3_arn                                   = aws_sfn_activity.daemon_video_transfer_from_s3_to_s3.id
    daemon_video_validate_metadata_arn                                        = aws_sfn_activity.daemon_video_validate_metadata.id
    daemon_video_validate_analysis_arn                                        = aws_sfn_activity.daemon_video_validate_analysis.id
    daemon_video_create_streamable_preview_and_thumbnails_arn                 = aws_sfn_activity.daemon_video_create_streamable_preview_and_thumbnails.id
    daemon_video_is_create_streamable_preview_and_thumbnails_done_arn         = aws_sfn_activity.daemon_video_is_create_streamable_preview_and_thumbnails_done.id
    daemon_video_end_workflow_arn                                             = aws_sfn_activity.daemon_video_end_workflow.id
  })

  tags = {
    application_family = var.application_family
    environment        = var.environment
    service_name       = var.video_ingestion_workflow_state_machine_name
    terraformed        = true
  }
  tracing_configuration {
    enabled = true
  }
}
