locals {
  lambda_new_release_json_blaster = "${var.service_name}-new-release-json-blaster"
}

module "default_tags" {
  source             = "git@github.com:theorchard/terraform-default-tags.git//?ref=2.0.0"
  environment        = var.environment
  application_family = var.application_family
  service_name       = local.lambda_new_release_json_blaster
  team_name          = var.team_name
}

terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "prod/lambda-releases.theorchard.com/new-release-json-blaster/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

provider "aws" {
  region = var.aws_region

  default_tags {
    tags = module.default_tags.tags
  }
}

resource "aws_s3_object" "lambda_new_release_json_folder" {
  bucket = "${var.environment}-${var.s3_bucket}"
  key    = "${var.s3_path}/"
}

data "aws_iam_policy" "s3_policy" {
  name = "S3-${var.environment}-${var.s3_bucket}-${var.s3_path}-RW"
}

module "iam_owsrequest" {
  source = "git@github.com:theorchard/terraform-owsrequest.git//?ref=1.0.1"

  environment_name = var.environment
  service_name     = local.lambda_new_release_json_blaster
}

module "lambda_new_release_json_blaster" {
  # checkov:skip=CKV_AWS_116:Silencing Checkov false warning as the DLQ is actually enabled
  source = "git@github.com:theorchard/terraform-lambda.git//?ref=5.3.0"

  environment        = var.environment
  application_family = var.application_family
  lambda_name        = local.lambda_new_release_json_blaster

  lambda_description      = "Lambda for the releases.theorchard.com site"
  lambda_function_timeout = "300"
  use_container_image     = true
  vpc_enabled             = true
  vpc_id                  = var.vpc_id
  vpc_subnet_ids          = var.vpc_subnet_ids

  datadog_enabled          = true
  datadog_advanced_enabled = true

  lambda_function_environment_variables = {
    Environment         = var.environment
    SNOWFLAKE_ACCOUNT   = "delphi.us-east-1"
    SNOWFLAKE_USER      = "PROD_LAMBDA_NEW_RELEASES_JSON_BLASTER"
    SNOWFLAKE_ROLE      = "SONYINTERNAL_DB_PROD_SCHEMA_READ"
    SNOWFLAKE_DATABASE  = "SONY_INTERNAL"
    SNOWFLAKE_SCHEMA    = "PROD"
    SNOWFLAKE_WAREHOUSE = "SONY_INTERNAL_WH"
    SENTRY_DSN          = module.lambda_new_release_json_blaster_sentry.sentry_key_dsn_public_output
  }

  iam_managed_policy_attachments = [
    data.aws_iam_policy.s3_policy.arn,
    module.iam_owsrequest.policy_arn_output,
  ]
}

module "lambda_secrets" {
  source             = "git@github.com:theorchard/terraform-secrets-manager.git//?ref=1.5.1"
  for_each           = toset(var.lambda_secrets)
  environment        = var.environment
  service_name       = local.lambda_new_release_json_blaster
  secret_name        = each.value
  application_family = var.application_family
}

resource "aws_cloudwatch_event_rule" "lambda_run_daily" {
  name                = "${var.environment}-${local.lambda_new_release_json_blaster}"
  schedule_expression = "cron(0 11,23 * * ? *)"
  description         = "Run ${local.lambda_new_release_json_blaster} daily"
}

resource "aws_cloudwatch_event_target" "lambda_daily_target" {
  rule      = aws_cloudwatch_event_rule.lambda_run_daily.name
  target_id = "${var.environment}-${local.lambda_new_release_json_blaster}_daily_target"
  arn       = module.lambda_new_release_json_blaster.lambda_arn
}

resource "aws_lambda_permission" "allow_cloudwatch_to_call_lambda" {
  statement_id  = "AllowExecutionFromCloudWatch"
  action        = "lambda:InvokeFunction"
  function_name = "${var.environment}-${local.lambda_new_release_json_blaster}"
  principal     = "events.amazonaws.com"
  source_arn    = aws_cloudwatch_event_rule.lambda_run_daily.arn
}

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

  environment                       = var.environment
  service_name                      = local.lambda_new_release_json_blaster
  lambda_invocation_monitor_enabled = false
}

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

  service_name       = "lambda-new-release-json-blaster"
  environment        = var.environment
  platform           = "python"
  application_family = var.application_family
}
