package utils

import (
	"context"
	"fmt"

	corev1 "k8s.io/api/core/v1"
	"sigs.k8s.io/controller-runtime/pkg/client"

	"github.com/tidbcloud/infra-provider/pkg/consts"
)

const (
	dataplaneKongProxyServiceName = "clustergateway-kong-proxy"
)

func GetDataplaneKongLBHostname(ctx context.Context, remoteCli client.Client) (string, error) {
	service := &corev1.Service{}

	if err := remoteCli.Get(ctx, client.ObjectKey{Namespace: consts.DataplaneAdminNamespace, Name: dataplaneKongProxyServiceName}, service); err != nil {
		return "", fmt.Errorf("get kong proxy service: %w", err)
	}
	if count := len(service.Status.LoadBalancer.Ingress); count != 1 {
		return "", fmt.Errorf("unexpected kong proxy ingress length: %d", count)
	}

	address := service.Status.LoadBalancer.Ingress[0].Hostname
	if address == "" {
		address = service.Status.LoadBalancer.Ingress[0].IP
	}
	return address, nil
}
