resource "aws_ecs_service" "service" {
  name            = "ecs-${local.service_name}"
  cluster         = data.terraform_remote_state.mop_core.outputs.ecs_cluster_id
  launch_type     = "FARGATE"
  task_definition = aws_ecs_task_definition.service_task.arn
  desired_count   = local.task_count

  network_configuration {
    subnets = data.terraform_remote_state.mop_core.outputs.vpc_subnet_private_ids
    security_groups = [
      data.terraform_remote_state.mop_core.outputs.sg_http_public_id,
      data.terraform_remote_state.mop_core.outputs.sg_alb_id,
      data.terraform_remote_state.mop_core.outputs.sg_efs_mnt_id
    ]
  }
  service_registries {
    registry_arn = aws_service_discovery_service.reporting_service.arn
  }

  deployment_circuit_breaker {
    enable   = "true"
    rollback = "true"
  }

  propagate_tags          = "SERVICE"
  enable_ecs_managed_tags = true
  tags                    = local.cost_bucket_tags

  depends_on = [
    aws_ecs_task_definition.service_task
  ]
 }

data aws_ecs_task_definition "service_task" {
  task_definition = "tf_${local.service_name}_td"
  depends_on      = [ aws_ecs_task_definition.service_task ]
}

data "aws_secretsmanager_secret" "es_micrometer_creds" {
  name = "es_micrometer_creds" 
}


resource "aws_ecs_task_definition" "service_task" {
  family                    = "tf_${local.service_name}_td"
  container_definitions     = data.template_file.task_definition.rendered
  requires_compatibilities  = ["FARGATE"]
  network_mode              = "awsvpc"
  cpu                       = 1024
  memory                    = 2048
  task_role_arn             = aws_iam_role.reporting_task_role.arn
  execution_role_arn        = aws_iam_role.reporting_task_role.arn
  tags                      = local.cost_bucket_tags
}

# Logging
resource "aws_cloudwatch_log_group" "service_log" {
  name              = "tf-ecs-group/${local.service_name}"
  retention_in_days = 30
  tags              = local.cost_bucket_tags
}

data "aws_secretsmanager_secret" "spring_cloud_config" {
  name = "spring_cloud_config"
}

data template_file "task_definition" {
  template = file("${path.module}/templates/task-definition.json")

  vars = {
    image_url = "745435643501.dkr.ecr.us-east-1.amazonaws.com/reporting:${data.aws_ssm_parameter.container_image.value}"
    container_name        = local.service_name
    container_port        = local.container_port
    log_group_region      = var.region[terraform.workspace]
    log_group_name        = aws_cloudwatch_log_group.service_log.name
    spring_profiles_active = local.spring_config_label
    spring_cloud_config_label = local.spring_config_label
    aws_default_region        = var.region[terraform.workspace]
    health_check_path = local.health_check_path
    auth0_client_id       = auth0_client.client.client_id
    auth0_client_secret   = auth0_client.client.client_secret
    # properties file settings
    subdomain = local.subdomain
    environment_name = local.deploy_env_name
    es_url = var.es_host_map[terraform.workspace]
    es_username = "console_api"
    es_password_arn = data.aws_secretsmanager_secret.es_password.arn
    es_host = data.terraform_remote_state.mop_core.outputs.es_host
    es_micrometer_username = "${data.aws_secretsmanager_secret.es_micrometer_creds.arn}:username::"
    es_micrometer_password = "${data.aws_secretsmanager_secret.es_micrometer_creds.arn}:password::"
  }
}
  data aws_secretsmanager_secret es_password {
  name = "io-netfoundry-elasticsearch-client-password"
}
