# ALB part
module "main_alb" {
  source      = "../../../modules/ec2/alb/alb_v2"
  name_prefix = local.name_prefix
  alb_security_groups = [
    module.main_sg_map.alb_id,
    module.main_sg_map.nat_web_id,
    module.main_sg_map.ext_http_debug_id,
    module.main_sg_map.ext_https_debug_id,
  ]
  alb_subnets               = module.main_public_subnets.subnet_ids
  access_logs_enabled       = true
  access_logs_bucket_prefix = "${local.name_prefix}-external-main"
  access_logs_bucket_name   = data.aws_s3_bucket.logs.bucket
  enable_ip_blocking        = true
  alb_idle_timeout          = 180
  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ API",
      service                  = "Load balancing",
      plat_env_project_service = "${local.aggregated_tag}_SLZA_LB"
    }
  )
}

module "main_alb_listener_http" {
  source                = "../../../modules/ec2/alb/listener"
  alb_arn               = module.main_alb.alb_arn
  alb_listener_protocol = "HTTP"
}

module "main_alb_listener_https" {
  source                  = "../../../modules/ec2/alb/listener"
  alb_arn                 = module.main_alb.alb_arn
  alb_listener_protocol   = "HTTPS"
  aws_acm_certificate_arn = var.cert_arn
}

module "internal_alb" {
  source      = "../../../modules/ec2/alb/alb_v2"
  name_prefix = local.name_prefix
  alb_security_groups = [
    module.main_sg_map.alb_id,
    module.main_sg_map.int_http_debug_id,
    module.main_sg_map.int_https_debug_id,
  ]
  alb_subnets               = module.main_private_subnets.subnet_ids
  alb_internal              = true
  access_logs_enabled       = true
  access_logs_bucket_prefix = "${local.name_prefix}-internal-alb"
  access_logs_bucket_name   = data.aws_s3_bucket.logs.bucket
  enable_ip_blocking        = true
  alb_idle_timeout          = 180
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Load balancing",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_LB"
    }
  )
}

module "internal_alb_listener_http" {
  source                = "../../../modules/ec2/alb/listener"
  alb_arn               = module.internal_alb.alb_arn
  alb_listener_protocol = "HTTP"
}

module "internal_alb_listener_https" {
  source                  = "../../../modules/ec2/alb/listener"
  alb_arn                 = module.internal_alb.alb_arn
  alb_listener_protocol   = "HTTPS"
  aws_acm_certificate_arn = var.cert_arn
}

module "nlb_forwarder" {
  source = "../../../modules/ec2/nlb_for_alb"

  name_prefix        = local.name_prefix
  vpc_id             = module.main_vpc.vpc_id
  alb_arn            = module.main_alb.alb_arn
  public_subnets_ids = module.main_public_subnets.subnet_ids

  security_groups = [
    module.main_sg_map.alb_id,
    module.main_sg_map.nat_web_id,
    module.main_sg_map.ext_http_debug_id,
    module.main_sg_map.ext_https_debug_id,
  ]

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Load balancing",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_LB"
    }
  )
}

output "nlb_eips" {
  value = module.nlb_forwarder.nlb_eips
}
