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

module "lambda_populate_hfa_pending_request" {
  source                    = "git@github.com:theorchard/terraform-lambda.git?ref=4.0.1"
  application_family        = var.application_family
  environment               = var.environment
  lambda_name               = var.lambda_populate_pending_request
  lambda_description        = "Generate publishing HFA request"
  lambda_function_timeout   = "300"
  use_container_image       = true
  vpc_enabled               = true
  vpc_id                    = module.vpc_info.vpc_id
  vpc_subnet_ids            = module.vpc_info.default_private_subnet_ids
  datadog_advanced_enabled  = true
  cloudwatch_event_enabled  = true
  cloudwatch_event_schedule = "cron(0 7 * * ? *)"
  iam_managed_policy_attachments = [
    aws_iam_policy.lambda_publishing_hfa_secret_manager_policy.arn,
    aws_iam_policy.lambda_publishing_hfa_ses_email_policy.arn,
    module.lambda_populate_hfa_pending_request_owsrequest.policy_arn_output
  ]

  lambda_function_environment_variables = {
    Environment               = var.environment
    SENTRY_DSN                = module.lambda_publishing_hfa_sentry_project.sentry_key_dsn_public_output
    OA_USER                   = var.oa_user
    GRAPHQL_ROUTER_URL        = var.graphql_router_url
    PUBLISHING_MYSQL_DATABASE = var.publishing_database
    PUBLISHING_MYSQL_HOST     = var.publishing_host
    PUBLISHING_MYSQL_PORT     = 3306
    EMAIL_SENDER              = var.email_sender
    EMAIL_RECIPIENTS          = var.email_recipients
  }

  lambda_function_reserved_concurrent_executions = 1
}

# create datadog dashboards.
module "datadog_lambda_populate_hfa_pending_request" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.13.4"

  environment                       = var.environment
  service_name                      = var.lambda_populate_pending_request
  notification_endpoints            = var.datadog_notification_endpoints
  escalation_notification_endpoints = var.datadog_notification_endpoints

  lambda_invocation_monitor_enabled   = true
  lambda_invocation_time              = "last_24h"
  critical_invocation_number          = 0.5
  ok_invocation_number                = 1
  invocation_warning_number           = null
  critical_recovery_invocation_number = null
  invocation_warning_recovery_number  = null

  lambda_error_monitor_enabled          = true
  lambda_error_critical_number          = 1
  lambda_error_ok_number                = 0
  lambda_error_warning_number           = null
  lambda_error_warning_recovery_number  = null
  lambda_error_critical_recovery_number = null
}

data "aws_iam_policy_document" "assume_role_policy" {
  statement {
    actions = ["sts:AssumeRole"]

    principals {
      type = "AWS"

      identifiers = [
        "arn:aws:iam::437795906767:role/prod-jenkins-aws-task-agent",
      ]
    }
  }
}

data "aws_iam_policy_document" "invoke_lambda_policy_document" {
  statement {
    effect = "Allow"

    actions = [
      "lambda:InvokeFunction",
      "lambda:InvokeAsync",
    ]

    resources = [
      module.lambda_populate_hfa_pending_request.lambda_arn,
    ]
  }
}

resource "aws_iam_role" "lambda_invoke_role" {
  name               = "${var.environment}-populate-hfa-pending-request-lambda-invoke-role"
  assume_role_policy = data.aws_iam_policy_document.assume_role_policy.json
}

resource "aws_iam_role_policy" "invoke_lambda_inline_policy" {
  name = "${var.environment}-populate-hfa-pending-request-lambda-invoke-policy"
  role = aws_iam_role.lambda_invoke_role.id

  policy = data.aws_iam_policy_document.invoke_lambda_policy_document.json
}
