module "lambda_upc_provisioner" {
  source = "git@github.com:theorchard/terraform-lambda.git//?ref=3.2.0"

  environment                 = var.environment
  lambda_name                 = var.lambda_name
  application_family          = var.application_family
  lambda_description          = "Adds unused UPCs to the upc_repository SQS"
  lambda_function_memory_size = var.lambda_memory_size
  datadog_advanced_enabled    = true
  lambda_function_timeout     = var.lambda_default_timeout
  cloudwatch_event_enabled    = true
  cloudwatch_event_schedule   = "cron(0/15 * * * ? *)" # every 15 minutes
  use_container_image         = true
  vpc_id                      = module.vpc_info.vpc_id
  vpc_subnet_ids              = module.vpc_info.default_private_subnet_ids

  lambda_function_reserved_concurrent_executions = var.lambda_concurrent_executions

  lambda_function_environment_variables = {
    Environment               = var.environment
    AR_DB_PORT                = var.ar_db_port
    AR_DB_HOST                = var.ar_db_host
    AR_DB_DATABASE            = var.ar_db_database
    UPCS_AR_SELECT_LIMIT      = var.upcs_ar_select_limit
    UPCS_AR_SELECT_LIMIT_CRON = var.upcs_ar_select_limit_cron
    UPCS_AR_SELECT_OFFSET     = var.upcs_ar_select_offset
    LOGGER_LEVEL              = var.logger_level
    SENTRY_DSN                = module.sentry_upc_provisioner_lambda.sentry_key_dsn_public_output
  }

  iam_managed_policy_attachments = [
    aws_iam_policy.lambda_sqs_permission_policy.arn
  ]
}

resource "aws_lambda_permission" "with_sns" {
  statement_id  = "AllowExecutionFromSNS"
  action        = "lambda:InvokeFunction"
  function_name = module.lambda_upc_provisioner.lambda_name
  principal     = "sns.amazonaws.com"
  source_arn    = module.upc_provisioner_sns.topic_arn
}
