locals {
  python_app_name = "${var.service_name}-python"
  python_app_dir  = "apps/fargate/python"
  python_app_hash = md5(join(",", [
    filemd5("${local.python_app_dir}/Dockerfile"),
    filemd5("${local.python_app_dir}/webserver.py"),
  ]))
}

resource "aws_ecr_repository" "python_app_repository" {
  name                 = local.python_app_name
  image_tag_mutability = "MUTABLE"

  encryption_configuration {
    encryption_type = "KMS"
  }

  image_scanning_configuration {
    scan_on_push = true
  }
}

resource "null_resource" "python_app_build" {
  triggers = {
    src_hash = local.python_app_hash
  }

  provisioner "local-exec" {
    command = "/bin/bash ./scripts/build-docker.sh"

    environment = {
      SRC_DIR             = local.python_app_dir
      ECR_REPOSITORY_NAME = aws_ecr_repository.python_app_repository.name
      ECR_REPOSITORY_TAG  = local.python_app_hash
      ECR_REPOSITORY_URL  = aws_ecr_repository.python_app_repository.repository_url
    }
  }
}

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

  environment        = var.environment
  service_name       = local.python_app_name
  aws_region         = var.aws_region
  application_family = var.application_family

  task_cpu                          = 256
  task_memory                       = 512
  container_port                    = 8000
  health_check_grace_period_seconds = 5
  health_check_path                 = "/healthcheck"

  desired_task_count = 2
  minimum_capacity   = 2
  maximum_capacity   = 2

  vpc_id                  = data.aws_vpc.vpc.id
  load_balancer_subnets   = toset(data.aws_subnets.private_subnets.ids)
  fargate_service_subnets = toset(data.aws_subnets.private_subnets.ids)

  datadog_custom_image   = "${data.aws_caller_identity.current.account_id}.dkr.ecr.${var.aws_region}.amazonaws.com/orchard-datadog-agent:staging"
  fluentbit_custom_image = "${data.aws_caller_identity.current.account_id}.dkr.ecr.${var.aws_region}.amazonaws.com/orchard-fluent-bit:latest"

  environment_variables = [
    { BUILD_ID = null_resource.python_app_build.id },
    { DD_VERSION = "3.7" },
  ]
}

output "python_test_command" {
  value = "curl -i https://${module.python_app_fargate.fargate_web_service_name}.dev.theorchard.io/checkout"
}
