resource "aws_ecs_service" "service_failover" {
  provider        = aws.ap-south-1
  name            = "ecs-${local.service_name}"
  cluster         = data.terraform_remote_state.mop_core_failover.outputs.ecs_cluster_id
  launch_type     = "FARGATE"
  task_definition = aws_ecs_task_definition.service_task_failover.arn
  desired_count   = local.failover_task_count

  network_configuration {
    subnets = data.terraform_remote_state.mop_core_failover.outputs.vpc_subnet_private_ids
    security_groups = [
      data.terraform_remote_state.mop_core_failover.outputs.sg_http_public_id,
      data.terraform_remote_state.mop_core_failover.outputs.sg_alb_id,
    ]
  }
  service_registries {
    registry_arn = aws_service_discovery_service.reporting_service_failover.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_failover
  ]
 }

data aws_ecs_task_definition "service_task_failover" {
  provider        = aws.ap-south-1
  task_definition = "tf_${local.service_name}_td"
  depends_on      = [ aws_ecs_task_definition.service_task_failover ]
}

resource "aws_ecs_task_definition" "service_task_failover" {
  provider                  = aws.ap-south-1
  family                    = "tf_${local.service_name}_td"
  container_definitions     = data.template_file.task_definition_failover.rendered
  requires_compatibilities  = ["FARGATE"]
  network_mode              = "awsvpc"
  cpu                       = 512
  memory                    = 1024
  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_failover" {
  provider          = aws.ap-south-1
  name              = "tf-ecs-group/${local.service_name}"
  retention_in_days = 30
  tags              = local.cost_bucket_tags
}

data template_file "task_definition_failover" {
  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      = local.failover_region
    log_group_name        = aws_cloudwatch_log_group.service_log.name
    spring_profiles_active = local.spring_config_label
    spring_cloud_config_uri = "http://config-service.mop.local:8888"
    spring_cloud_config_label = local.spring_config_label
    aws_default_region        = local.failover_region
    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

  }
}
