// Provisioned in shared module
data "aws_route53_zone" "kadicon" {
  name = var.base_domain
}

data "aws_lb" "backend" {
  name = var.lb_backend_name
}

data "aws_lb_listener" "backend" {
  load_balancer_arn = data.aws_lb.backend.arn
  port              = 443
}

resource "aws_lb_target_group" "backend_http" {
  name            = "backend-http-${var.stage}"
  target_type     = "ip"
  port            = 80
  protocol        = "HTTP"
  ip_address_type = "ipv4"
  vpc_id          = var.aws_vpc_id

  health_check {
    enabled = true
    path    = "/api/health"
  }
}

resource "aws_lb_target_group" "backend_ws" {
  name            = "backend-ws-${var.stage}"
  target_type     = "ip"
  port            = 3001
  protocol        = "HTTP"
  ip_address_type = "ipv4"
  vpc_id          = var.aws_vpc_id

  health_check {
    enabled = true
    path    = "/"
    matcher = "200,404,426"
  }
}

resource "aws_lb_listener_rule" "backend_http" {
  listener_arn = data.aws_lb_listener.backend.arn
  priority     = var.stage == "production" ? 100 : 90

  action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.backend_http.arn
  }

  condition {
    host_header {
      values = ["api.${var.domain}"]
    }
  }
}

resource "aws_lb_listener_rule" "backend_ws" {
  listener_arn = data.aws_lb_listener.backend.arn
  priority     = var.stage == "production" ? 80 : 70

  action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.backend_ws.arn
  }

  condition {
    host_header {
      values = ["ws.${var.domain}"]
    }
  }
}

resource "aws_route53_record" "backend_http" {
  zone_id = data.aws_route53_zone.kadicon.zone_id
  name    = "api.${var.domain}"
  type    = "CNAME"
  ttl     = 300
  records = [data.aws_lb.backend.dns_name]
}

resource "aws_route53_record" "backend_ws" {
  zone_id = data.aws_route53_zone.kadicon.zone_id
  name    = "ws.${var.domain}"
  type    = "CNAME"
  ttl     = 300
  records = [data.aws_lb.backend.dns_name]
}
