package iam

import (
	"context"
	"fmt"
	"strings"

	eksv1beta1 "github.com/crossplane-contrib/provider-aws/apis/eks/v1beta1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"sigs.k8s.io/controller-runtime/pkg/client"

	cloudv1 "github.com/tidbcloud/infra-api/api/v1"
	"github.com/tidbcloud/infra-provider/pkg/resource"
)

func GetOIDCProviderIssuer(ctx context.Context, c client.Client, network *cloudv1.Network) (string, error) {
	name := resource.EKS.Namer(network).Name()
	eks := eksv1beta1.Cluster{
		ObjectMeta: metav1.ObjectMeta{
			Name: name,
		},
	}
	if err := c.Get(ctx, client.ObjectKeyFromObject(&eks), &eks); err != nil {
		return "", err
	}
	if eks.Status.AtProvider.Identity.OIDC.Issuer == "" {
		return "", fmt.Errorf("wait for eks ready to get oidc issuer")
	}

	return eks.Status.AtProvider.Identity.OIDC.Issuer, nil
}

func GetOIDCProvider(ctx context.Context, c client.Client, network *cloudv1.Network) (string, error) {
	issuer, err := GetOIDCProviderIssuer(ctx, c, network)
	if err != nil {
		return "", err
	}
	return strings.TrimPrefix(issuer, "https://"), nil
}
