provider "aws" {
  region = var.aws_region

  default_tags {
    tags = module.default_tags.tags
  }
}

# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket  = "orcd-terraform-state"
    key     = "prod/snowflake-mysql-connector/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

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       = var.service_name
  team_name          = var.team_name
}

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

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

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

  environment = var.environment
}

module "service" {
  source = "git@github.com:theorchard/terraform-fargate.git//?ref=6.5.0"

  environment        = var.environment
  service_name       = var.service_name
  aws_region         = var.aws_region
  application_family = var.application_family

  datadog_enabled = false

  non_ecr_image                            = "086679231553.dkr.ecr.us-east-1.amazonaws.com/snowflake-database-connector-agent:latest"
  task_type                                = "web_service"
  container_port                           = "8080"
  desired_task_count                       = 1
  task_cpu                                 = 4096
  task_memory                              = 8192
  maximum_capacity                         = 1
  minimum_capacity                         = 1
  task_ephemeral_storage_size              = 200
  deployment_maximum_percent               = 100
  deployment_minimum_healthy_percent       = 0
  load_balancer_access_logs_s3_bucket_name = data.aws_s3_bucket.logs.id
  route53_zone_id                          = data.aws_route53_zone.theorchard_io.zone_id
  vpc_id                                   = module.vpc_info.vpc_id
  health_check_path                        = "/actuator/health"
  # Disable container healthcheck (curl is not available)
  health_check_mode         = "CMD"
  health_check_command_list = ["java", "-version"]

  fargate_service_subnets = module.vpc_info.default_private_subnet_ids
  load_balancer_subnets   = module.vpc_info.default_private_subnet_ids

  environment_variables = [
    { "JAVA_OPTS" = "-Xmx7g" },
    { "SNOWFLAKE_ENFORCEDURL" = "delphi.us-east-1.snowflakecomputing.com:443" },
    { "SNOWFLAKE_APPLICATION_NAME" = "SNOWFLAKE_MYSQL_CONNECTOR" },
    { "SNOWFLAKE_USERNAME" = "MYSQL_CONNECTOR_AGENT_USER" },
    { "SNOWFLAKE_DATASOURCES_QADD1_URL" = "jdbc:mariadb://qa-direct-delivery-cluster.cluster-cb22xqmk0y0q.us-east-1.rds.amazonaws.com:3306/?sslMode=VERIFY_IDENTITY" },
    { "SNOWFLAKE_DATASOURCES_QADD1_USERNAME" = "snowflake_agent_user" },
    { "SNOWFLAKE_DATASOURCES_PRODDD1_URL" = "jdbc:mariadb://prod-direct-delivery-cluster.cluster-cb22xqmk0y0q.us-east-1.rds.amazonaws.com:3306/?sslMode=VERIFY_IDENTITY" },
    { "SNOWFLAKE_DATASOURCES_PRODDD1_USERNAME" = "snowflake_agent_user" },
  ]
  secrets = [
    { "SNOWFLAKE_PRIVATEKEY" = "${var.environment}/${var.service_name}/SNOWFLAKE_PRIVATE_KEY" },
    { "SNOWFLAKE_DATASOURCES_QADD1_PASSWORD" = "${var.environment}/${var.service_name}/SNOWFLAKE_DATASOURCES_QADD1_PASSWORD" },
    { "SNOWFLAKE_DATASOURCES_PRODDD1_PASSWORD" = "${var.environment}/${var.service_name}/SNOWFLAKE_DATASOURCES_PRODDD1_PASSWORD" },
  ]
}

module "service_dashboard" {
  source = "git@github.com:theorchard/terraform-datadog.git//modules/service?ref=6.18.2"

  environment  = var.environment
  service_name = var.service_name

  environment_type                  = "fargate"
  notification_endpoints            = var.alert_channel
  service_4xx_monitor_enabled       = false
  service_5xx_monitor_enabled       = false
  application_family                = var.application_family
  escalation_notification_endpoints = var.alert_channel
} */
