locals {
  vendor_image_caching_secrets = [
    "SENTRY_DSN",
  ]
}

data "aws_ecr_repository" "vendor_image_caching_ecr" {
  name = "${local.project_group}/lambda/vendor-image-caching"
}

resource "aws_cloudwatch_log_group" "vendor_image_caching_log_group" {
  name              = "/aws/lambda/${local.name_prefix}-vendor_image_caching"
  retention_in_days = module.cloudwatch_logs_retention_by_env[local.env_prefix]

  tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "CloudWatch",
      plat_env_project_service = "${local.aggregated_tag}_PRL_CW"
    }
  )
}

resource "aws_secretsmanager_secret" "vendor_image_caching_secret" {
  for_each = toset(local.vendor_image_caching_secrets)

  name       = "${local.secrets_name_prefix}/vendor_image_caching/${each.value}"
  kms_key_id = data.aws_kms_key.secrets_general_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

module "vendor_image_caching_role" {
  source = "../../../modules/iam/roles/lambda_role"

  name_prefix                = local.name_prefix
  name                       = "vendor-image-caching-role"
  allow_execution_inside_vpc = true

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "Lambda",
      plat_env_project_service = "${local.aggregated_tag}_PRL_LMB"
    }
  )

  policies_list = [
    data.aws_iam_policy.secrets_services_ro.arn,
    data.aws_iam_policy.vendor_image_caching_consumer.arn,
    data.aws_iam_policy.vendor_image_caching_s3_rw_policy.arn,
  ]
}

resource "aws_lambda_function" "vendor_image_caching_lambda" {
  function_name = "${local.name_prefix}-vendor_image_caching"
  image_uri     = "${data.aws_ecr_repository.vendor_image_caching_ecr.repository_url}:${local.docker_image_env_tag[local.env_prefix]}"
  package_type  = "Image"
  role          = module.vendor_image_caching_role.role.arn
  description   = "Managed by Terraform."

  memory_size                    = 512
  timeout                        = 900
  reserved_concurrent_executions = 3

  vpc_config {
    security_group_ids = [data.aws_security_group.lambda.id]
    subnet_ids         = data.aws_subnets.private_subnets.ids
  }

  image_config {
    command = ["datadog_lambda.handler.handler"]
  }

  environment {
    variables = {
      ENVIRONMENT                = local.environment
      SENTRY_DSN                 = aws_secretsmanager_secret.vendor_image_caching_secret["SENTRY_DSN"].name
      AWS_S3_BUCKET_NAME         = "${local.name_prefix}-vendor-image-caching"
      MONGODB_USER               = aws_secretsmanager_secret.vendor_api_secret["MONGODB_USER"].name
      MONGODB_PASSWORD           = aws_secretsmanager_secret.vendor_api_secret["MONGODB_PASSWORD"].name
      MONGODB_DATABASE           = "vendor-api"
      MONGODB_HOST               = "dev-apollo.cluster-cic9zqsxd2y6.us-east-1.docdb.amazonaws.com"
      REDIS_URL                  = "rediss://${data.aws_elasticache_replication_group.vendor_api.primary_endpoint_address}:${data.aws_elasticache_replication_group.vendor_api.port}/2?ssl_cert_reqs=none"
      AWS_IMAGE_STORAGE_BASE_URL = "https://dk9mry70382ls.cloudfront.net"

      DD_API_KEY_SECRET_ARN = aws_secretsmanager_secret.common_secret["DD_API_KEY"].arn
      DD_TRACE_ENABLED      = "true"
      DD_SITE               = "datadoghq.com"
      DD_LAMBDA_HANDLER     = "vendor_image_caching.lambda_handler"
    }
  }

  tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "Lambda",
      plat_env_project_service = "${local.aggregated_tag}_PRL_LMB",
      service_name             = "apollo-vendor-image-caching",
    }
  )

  depends_on = [
    aws_cloudwatch_log_group.vendor_image_caching_log_group,
    aws_secretsmanager_secret.vendor_api_secret,
    aws_secretsmanager_secret.vendor_image_caching_secret,
    module.vendor_image_caching_role,
  ]

  lifecycle {
    ignore_changes = [
      image_uri
    ]
  }
}
/*
resource "aws_lambda_event_source_mapping" "vendor_image_caching_lambda_sqs" {
  event_source_arn = data.aws_sqs_queue.vendor_image_caching_queue.arn
  function_name    = aws_lambda_function.vendor_image_caching_lambda.arn
  batch_size       = 10
}
*/
