locals {
  name = "${var.env_prefix}-${var.project_group}-${var.project}"
}

module "task_definition" {
  source = "../fargate_v2"

  # task definition
  env_prefix         = var.env_prefix
  cpu                = var.cpu
  memory             = var.memory
  project            = var.project
  project_group      = var.project_group
  task_exec_role_arn = var.task_exec_role_arn
  task_family        = local.name
  task_role_arn      = var.task_role_arn
  common_tags        = var.common_tags

  # container definition
  secrets  = var.secrets
  region   = var.region
  image    = var.image
  env_vars = var.env_vars
  command  = var.command
}

resource "aws_cloudwatch_event_rule" "this" {
  for_each            = var.schedule_expression
  name                = "${local.name}-${each.key}"
  description         = "Run ${local.name} task at a scheduled time (${each.value.expression})"
  schedule_expression = each.value.expression
  is_enabled          = each.value.enabled
}

resource "aws_cloudwatch_event_target" "this" {
  for_each  = var.schedule_expression
  target_id = "${local.name}-scheduled_task_target"
  rule      = aws_cloudwatch_event_rule.this[each.key].name
  arn       = var.cluster_arn
  role_arn  = var.scheduler_role_arn

  ecs_target {
    propagate_tags      = "TASK_DEFINITION"
    task_count          = var.task_count
    task_definition_arn = module.task_definition.ecs_task_definition.arn
    launch_type         = "FARGATE"
    network_configuration {
      subnets         = var.subnets
      security_groups = var.security_groups
    }
  }
}
