
# Lambda function for the acknowledge step
module "acknowledge_lambda_v2" {
  source = "git@github.com:theorchard/terraform-lambda.git"

  environment              = "${var.environment}"
  lambda_name              = "assets-acknowledge-v2"
  use_custom_function_name = true
  custom_function_name     = "assets-acknowledge-v2-${var.environment}"
  lambda_description = "Initiates the v2 asset validation and encoding flow"

  lambda_function_environment_variables = {
    Environment                  = "${var.environment}"
    SNS_GENERAL_STATUS_TOPIC_ARN = "${module.sns_general_status.proxied_sns_arn}"
    SENTRY_DSN                   = "${var.sentry_dsn_acknowledge}"
  }

  lambda_function_timeout                        = "${var.lambda_default_timeout}"
  vpc_security_group_ids                         = "${var.vpc_security_group_ids}"
  iam_policy_file_enabled                        = true
  vpc_subnet_ids                                 = "${var.vpc_subnet_ids_v2}"
  iam_policy_file_location                       = "${var.iam_policy_file_location}"
  lambda_function_reserved_concurrent_executions = "${var.lambda_concurrent_executions}"
  datadog_enabled           = "${var.datadog_enabled}"
}

# Lambda function for the encoding route step
module "encoding_route_lambda_v2" {
  source = "git@github.com:theorchard/terraform-lambda.git"

  environment        = "${var.environment}"
  lambda_name        = "assets-encoding-route-v2"
  use_custom_function_name = true
  custom_function_name     = "assets-encoding-route-v2-${var.environment}"  
  lambda_description = "Determines the media type of the given asset and branches to either the audio or image flow"

  lambda_function_environment_variables = {
    Environment                  = "${var.environment}"
    SNS_GENERAL_STATUS_TOPIC_ARN = "${module.sns_general_status.proxied_sns_arn}"
    SENTRY_DSN                   = "${var.sentry_dsn_encoding_route}"
  }

  lambda_function_timeout                        = "${var.lambda_default_timeout}"
  vpc_security_group_ids                         = "${var.vpc_security_group_ids}"
  vpc_subnet_ids                                 = "${var.vpc_subnet_ids_v2}"
  iam_policy_file_enabled                        = true
  iam_policy_file_location                       = "${var.iam_policy_file_location}"
  lambda_function_reserved_concurrent_executions = "${var.lambda_concurrent_executions}"
  datadog_enabled           = "${var.datadog_enabled}"

}

# Lambda function for the audio validation step
module "audio_validation_lambda_v2" {
  source = "git@github.com:theorchard/terraform-lambda.git"

  environment        = "${var.environment}"
  lambda_name        = "assets-audio-validation-v2"
  use_custom_function_name = true
  custom_function_name     = "assets-audio-validation-v2-${var.environment}"    
  lambda_description = "Validates audio files"

  lambda_function_environment_variables = {
    Environment                  = "${var.environment}"
    SNS_GENERAL_STATUS_TOPIC_ARN = "${module.sns_general_status.proxied_sns_arn}"
    SENTRY_DSN                   = "${var.sentry_dsn_audio_validation}"
  }

  lambda_function_timeout                        = "${var.lambda_default_timeout}"
  vpc_security_group_ids                         = "${var.vpc_security_group_ids}"
  vpc_subnet_ids                                 = "${var.vpc_subnet_ids_v2}"
  iam_policy_file_enabled                        = true
  iam_policy_file_location                       = "${var.iam_policy_file_location}"
  lambda_function_memory_size                    = "${var.audio_validation_lambda_memory_size}"
  lambda_function_reserved_concurrent_executions = "${var.lambda_concurrent_executions}"
  datadog_enabled           = "${var.datadog_enabled}"

}

# Lambda function for the image validation step
module "image_validation_lambda_v2" {
  source = "git@github.com:theorchard/terraform-lambda.git"

  environment        = "${var.environment}"
  lambda_name        = "assets-image-validation-v2"
  use_custom_function_name = true
  custom_function_name     = "assets-image-validation-v2-${var.environment}"      
  lambda_description = "Validates images"

  lambda_function_environment_variables = {
    Environment                  = "${var.environment}"
    SNS_GENERAL_STATUS_TOPIC_ARN = "${module.sns_general_status.proxied_sns_arn}"
    SENTRY_DSN                   = "${var.sentry_dsn_image_validation}"
  }

  lambda_function_timeout                        = "${var.lambda_default_timeout}"
  vpc_security_group_ids                         = "${var.vpc_security_group_ids}"
  vpc_subnet_ids                                 = "${var.vpc_subnet_ids_v2}"
  iam_policy_file_enabled                        = true
  iam_policy_file_location                       = "${var.iam_policy_file_location}"
  lambda_function_memory_size                    = "${var.image_validation_lambda_memory_size}"
  lambda_function_reserved_concurrent_executions = "${var.lambda_concurrent_executions}"
  datadog_enabled           = "${var.datadog_enabled}"
}

# Lambda function for the image encoding step
module "image_encoding_lambda_v2" {
  source = "git@github.com:theorchard/terraform-lambda.git"

  environment        = "${var.environment}"
  lambda_name        = "assets-image-encoding-v2"
  use_custom_function_name = true
  custom_function_name     = "assets-image-encoding-v2-${var.environment}"        
  lambda_description = "Encodes images"

  lambda_function_environment_variables = {
    Environment                   = "${var.environment}"
    SNS_ENCODING_STATUS_TOPIC_ARN = "${module.sns_encoding_status.proxied_sns_arn}"
    SNS_GENERAL_STATUS_TOPIC_ARN  = "${module.sns_general_status.proxied_sns_arn}"
    OUTPUT_BUCKET_NAME            = "${var.mezzanine_assets_bucket}"
    PREVIEW_OUTPUT_BUCKET_NAME    = "${var.image_previews_bucket}"
    SENTRY_DSN                    = "${var.sentry_dsn_image_encoding}"
  }

  lambda_function_timeout                        = "${var.lambda_default_timeout}"
  vpc_security_group_ids                         = "${var.vpc_security_group_ids}"
  vpc_subnet_ids                                 = "${var.vpc_subnet_ids_v2}"
  iam_policy_file_enabled                        = true
  iam_policy_file_location                       = "${var.iam_policy_file_location}"
  lambda_function_memory_size                    = "${var.image_encoding_lambda_memory_size}"
  lambda_function_reserved_concurrent_executions = "${var.lambda_concurrent_executions}"
  datadog_enabled           = "${var.datadog_enabled}"
}

# Lambda function for general asset status notifications
module "general_status_notification_lambda_v2" {
  source = "git@github.com:theorchard/terraform-lambda.git"

  environment        = "${var.environment}"
  lambda_name        = "assets-general-status-notification-v2"
  use_custom_function_name = true
  custom_function_name     = "assets-general-status-notification-v2-${var.environment}"     
  lambda_description = "Updates the status of an asset processing job"

  lambda_function_environment_variables = {
    Environment = "${var.environment}"
    SENTRY_DSN  = "${var.sentry_dsn_general_status}"
  }

  lambda_function_timeout                        = "${var.lambda_default_timeout}"
  vpc_security_group_ids                         = "${var.vpc_security_group_ids}"
  vpc_subnet_ids                                 = "${var.vpc_subnet_ids_v2}"
  iam_policy_file_enabled                        = true
  iam_policy_file_location                       = "${var.iam_policy_file_location}"
  lambda_function_reserved_concurrent_executions = "${var.lambda_concurrent_executions}"
  datadog_enabled           = "${var.datadog_enabled}"
}

# Lambda function for the final status notification lambda
module "final_status_notification_lambda_v2" {
  source = "git@github.com:theorchard/terraform-lambda.git"

  environment        = "${var.environment}"
  lambda_name        = "assets-final-status-notification-v2"
  use_custom_function_name = true
  custom_function_name     = "assets-final-status-notification-v2-${var.environment}"  
  lambda_description = "Processes notifications for the final status of an asset"

  lambda_function_environment_variables = {
    Environment                  = "${var.environment}"
    SENTRY_DSN                   = "${var.sentry_dsn_final_status}"
  }

  lambda_function_timeout                        = "${var.lambda_default_timeout}"
  vpc_security_group_ids                         = "${var.vpc_security_group_ids}"
  vpc_subnet_ids                                 = "${var.vpc_subnet_ids_v2}"
  iam_policy_file_enabled                        = true
  iam_policy_file_location                       = "${var.iam_policy_file_location}"
  lambda_function_reserved_concurrent_executions = "${var.lambda_concurrent_executions}"
  datadog_enabled           = "${var.datadog_enabled}"
}

# Lambda function for error reporting step
module "error_reporting_lambda_v2" {
  source = "git@github.com:theorchard/terraform-lambda.git"

  environment        = "${var.environment}"
  lambda_name        = "assets-error-reporting-v2"
  use_custom_function_name = true
  custom_function_name     = "assets-error-reporting-v2-${var.environment}"    
  lambda_description = "Reports about lambda error caught by step function"

  lambda_function_environment_variables = {
    Environment                  = "${var.environment}"
    SNS_GENERAL_STATUS_TOPIC_ARN = "${module.sns_general_status.proxied_sns_arn}"
    SENTRY_DSN                   = "${var.sentry_dsn_error_reporting}"
  }

  lambda_function_timeout                        = "${var.lambda_default_timeout}"
  vpc_security_group_ids                         = "${var.vpc_security_group_ids}"
  iam_policy_file_enabled                        = true
  vpc_subnet_ids                                 = "${var.vpc_subnet_ids_v2}"
  iam_policy_file_location                       = "${var.iam_policy_file_location}"
  lambda_function_reserved_concurrent_executions = "${var.lambda_concurrent_executions}"
  datadog_enabled           = "${var.datadog_enabled}"
}

# SNS definition for the encoding status topic, including lambda subscription
module "sns_encoding_status" {
  source = "../proxy_sns_to_lambda"

  environment    = "${var.environment}"
  lambda_arn     = "${module.final_status_notification_lambda_v2.lambda_arn}"
  lambda_name    = "assets-final-status-notification-v2-${var.environment}"
  sns_topic_name = "${var.sns_encoding_status_topic_name}"
}

# SNS topic for general status notifications, including lambda subscription
module "sns_general_status" {
  source = "../proxy_sns_to_lambda"

  environment    = "${var.environment}"
  lambda_arn     = "${module.general_status_notification_lambda_v2.lambda_arn}"
  lambda_name    = "assets-general-status-notification-v2-${var.environment}"
  sns_topic_name = "${var.sns_general_topic_name}"
}
