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

provider "aws" {
  region = var.aws_region

  default_tags {
    tags = module.default_tags.tags
  }
}

terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "qa/maxwell-cloudsearch-two/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

module "vpc_info" {
  source = "git@github.com:theorchard/terraform-vpc-info.git?ref=3.1.0"

  environment = var.environment
}

data "aws_kinesis_stream" "stream" {
  name = "${var.environment}-maxwell-cloudsearch"
}

data "aws_iam_policy" "cloudsearch_dev_maxwell_full" {
  name = "Cloudsearch-dev-Full"
}

module "maxwell_cloudsearch_two" {
  source                                              = "git@github.com:theorchard/terraform-lambda.git//?ref=5.2.1"
  lambda_name                                         = var.lambda_name
  lambda_description                                  = "Maxwell CloudSearch 2.0"
  environment                                         = var.environment
  application_family                                  = var.application_family
  lambda_runtime                                      = "python3.11"
  lambda_function_timeout                             = "300"
  lambda_function_memory_size                         = "512"
  use_container_image                                 = false
  datadog_advanced_enabled                            = false
  vpc_id                                              = module.vpc_info.vpc_id
  vpc_subnet_ids                                      = module.vpc_info.default_private_subnet_ids
  zappa_s3_policy_enabled                             = false
  event_source_mapping_enabled                        = true
  event_source_mapping_starting_position              = "LATEST"
  event_source_mapping_batch_size                     = "10"
  event_source_mapping_resource_type                  = "kinesis"
  event_source_mapping_stream_name                    = data.aws_kinesis_stream.stream.name
  event_source_mapping_bisect_batch_on_function_error = true

  iam_managed_policy_attachments = [
    data.aws_iam_policy.cloudsearch_dev_maxwell_full.arn
  ]

  lambda_function_environment_variables = {
    Environment                   = var.environment
    KINESIS_STREAM_NAME           = data.aws_kinesis_stream.stream.name
    CLOUDSEARCH_ENDPOINT          = "https://doc-dev-etl-tracks-m3uyplg26s5ii3swni4vzxrjvm.us-east-1.cloudsearch.amazonaws.com"
    CLOUDSEARCH_ENDPOINT_LABELS   = "https://doc-dev-etl-labels-j4ea5gakowuyjng5gzpn36t52q.us-east-1.cloudsearch.amazonaws.com"
    CLOUDSEARCH_ENDPOINT_PROJECTS = "https://doc-dev-etl-projects-i3ey2k6f2mxnsjtp3zkkzhgrta.us-east-1.cloudsearch.amazonaws.com"
    CLOUDSEARCH_ENDPOINT_RELEASES = "https://doc-dev-etl-releases-44ijjbolci4tr44ppnca76u2da.us-east-1.cloudsearch.amazonaws.com"
    CLOUDSEARCH_ENDPOINT_USERS    = "https://doc-dev-etl-users-hwsnmpj3ufd33qec36fr6o62fa.us-east-1.cloudsearch.amazonaws.com"
    SENTRY_DSN                    = "https://5ca67666d0174aa39f90c68bd17bcdb5@o22178.ingest.us.sentry.io/1203410"
    KAFKA_BOOTSTRAP_SERVERS       = var.kafka_bootstrap_servers
    # turn off writing to kafka topics.
    KAFKA_CLOUDSEARCH_TRACKS   = ""
    KAFKA_CLOUDSEARCH_PROJECTS = ""
    KAFKA_CLOUDSEARCH_RELEASES = ""
  }
}

module "lambda_maxwell_cloudsearch_two_dashboard" {
  source                                = "git@github.com:theorchard/terraform-datadog.git//modules/lambda?ref=6.13.4"
  environment                           = var.environment
  service_name                          = var.lambda_name
  notification_endpoints                = var.notification_endpoint
  escalation_notification_endpoints     = var.notification_endpoint
  lambda_invocation_monitor_enabled     = true
  lambda_error_monitor_enabled          = true
  lambda_error_critical_number          = 10
  lambda_error_warning_number           = 5
  lambda_error_ok_number                = 0
  lambda_error_critical_recovery_number = null
  lambda_error_warning_recovery_number  = null
}
