locals {
    commit_mechanicals_lambda_name = "${var.service_name}-commit-mechanicals"
}

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

    environment         = var.environment
    platform            = "python"
    service_name        = local.commit_mechanicals_lambda_name
    teams               = ["abacus-${var.environment}"]
    application_family  = var.application_family
}

module "lambda_abacus_commit_mechanicals_owsrequest" {
    source             = "git@github.com:theorchard/terraform-owsrequest.git//?ref=1.0.1"
    environment_name   = var.environment
    service_name       = local.commit_mechanicals_lambda_name
}

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

    environment                                       = var.environment
    lambda_function_timeout                           = 900
    use_container_image                               = true
    lambda_description                                = "Commit mechanicals to ledger tables."
    lambda_name                                       = local.commit_mechanicals_lambda_name
    vpc_id                                            = var.vpc_id
    vpc_subnet_ids                                    = var.vpc_subnet_ids
    application_family                                = var.application_family
    lambda_function_provisioned_concurrent_executions = var.lambda_provisioned_concurrent_executions

    lambda_function_reserved_concurrent_executions = 2
    lambda_function_memory_size                    = 10240

    datadog_enabled          = true
    datadog_advanced_enabled = true

    iam_managed_policy_attachments = [
        module.lambda_abacus_commit_mechanicals_owsrequest.policy_arn_output
    ]

    lambda_function_environment_variables = {
        ENVIRONMENT         = var.environment
        SNOWFLAKE_ACCOUNT   = var.lambda_snowflake_account
        SNOWFLAKE_DATABASE  = var.lambda_snowflake_database
        SNOWFLAKE_SCHEMA    = var.lambda_snowflake_schema
        SNOWFLAKE_WAREHOUSE = var.lambda_snowflake_warehouse
        SNOWFLAKE_ROLE      = var.lambda_snowflake_role
        SNOWFLAKE_USER      = var.lambda_snowflake_user
    }
}

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

  application_family = var.application_family
  environment        = var.environment
  service_name       = local.commit_mechanicals_lambda_name
  secret_name        = each.value
}

module "lambda_abacus_commit_mechanicals_datadog_monitor" {
    source                                = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.10.7"
    service_name                          = local.commit_mechanicals_lambda_name
    environment                           = var.environment
    lambda_invocation_monitor_enabled     = false
    lambda_error_monitor_enabled          = true
    lambda_error_critical_number          = 1
    lambda_error_ok_number                = 0
    lambda_error_warning_recovery_number  = null
    lambda_error_critical_recovery_number = null
    lambda_error_warning_number           = null
    notification_endpoints                = var.notification_endpoints
    teams                                 = var.teams
}
