module "lambda_fan_campaign_sentry_project" {
  source = "git@github.com:theorchard/terraform-sentry//?ref=4.1.2"

  environment        = var.environment
  teams              = [var.environment]
  service_name       = var.campaign_lambda_name
  application_family = var.application_family
  platform           = "python"
}


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

  environment        = var.environment
  application_family = var.application_family
  lambda_name        = var.campaign_lambda_name

  use_container_image                            = true
  lambda_description                             = "Processes Fan's campaign data and save it to snowflake."
  vpc_enabled                                    = true
  vpc_id                                         = module.vpc_info.vpc_id
  vpc_subnet_ids                                 = module.vpc_info.default_private_subnet_ids
  datadog_enabled                                = true
  datadog_advanced_enabled                       = true
  lambda_function_reserved_concurrent_executions = 10
  lambda_function_timeout                        = 900
  lambda_function_memory_size                    = 512

  lambda_function_environment_variables = {
    ENVIRONMENT             = var.environment
    SENTRY_DSN              = module.lambda_fan_campaign_sentry_project.sentry_key_dsn_public_output
    DLQ_TOPIC               = var.campaign_dlq_topic_name
    KAFKA_BOOTSTRAP_SERVERS = var.kafka_bootstrap_servers

    SNOWFLAKE_ACCOUNT   = var.SNOWFLAKE_ACCOUNT
    SNOWFLAKE_USER      = var.SNOWFLAKE_USER
    SNOWFLAKE_DATABASE  = var.SNOWFLAKE_DATABASE
    SNOWFLAKE_SCHEMA    = var.SNOWFLAKE_SCHEMA
    SNOWFLAKE_WAREHOUSE = var.SNOWFLAKE_WAREHOUSE
    SNOWFLAKE_TABLE     = var.SNOWFLAKE_CAMPAIGN_RAW_TABLE
  }

}

module "secret_snowflake_credentials" {
  source   = "git@github.com:theorchard/terraform-secrets-manager.git//?ref=1.5.1"
  for_each = toset(var.SNOWFLAKE_SECRETS_CREDS)

  environment        = var.environment
  service_name       = var.campaign_lambda_name
  secret_name        = each.value
  application_family = var.application_family
}

module "lambda_fan_campaign_datadog_monitoring" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.13.9"

  environment  = var.environment
  service_name = var.campaign_lambda_name
  teams        = ["kdh"]

  lambda_error_monitor_enabled = true
  lambda_error_warning_number  = 1
  lambda_error_critical_number = 5
  lambda_error_warning_recovery_number = 0
  lambda_error_critical_recovery_number = 4
  lambda_throttle_monitor_enabled = true
  lambda_throttle_time = "last_10m"
  lambda_max_memory_used_enabled = true
  notification_endpoints = var.notification_endpoints
}

# permission to be invoked by api gateway.
resource "aws_lambda_permission" "lambda_fan_campaign_api_integration_permission" {
  statement_id  = "AllowAPIGatewayIntegrationInvoke"
  action        = "lambda:InvokeFunction"
  function_name = module.lambda_fan_campaign.lambda_arn
  principal     = "apigateway.amazonaws.com"
  source_arn    = "${aws_api_gateway_rest_api.fan_response_rest_api.execution_arn}/*"
}
