package utils

import (
	"context"

	v1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/runtime"
	"k8s.io/apimachinery/pkg/types"
	restclient "k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

func NewInfraAPIClient(baseCli client.Client, scheme *runtime.Scheme) (client.Client, error) {
	secret := &v1.Secret{}
	ctx := context.Background()
	secretNamespace := "gitops"
	secretName := "config-service-infra-kubeconfig"
	err := baseCli.Get(ctx, types.NamespacedName{
		Namespace: secretNamespace,
		Name:      secretName,
	}, secret)
	if err != nil {
		return nil, err
	}
	kubeConfig, err := RestConfigFromSecret(secret)
	if err != nil {
		return nil, err
	}

	infraAPICli, err := client.New(kubeConfig, client.Options{
		Scheme: scheme,
	})
	if err != nil {
		return nil, err
	}

	return infraAPICli, nil
}

func RestConfigFromSecret(secret *v1.Secret) (*restclient.Config, error) {
	return clientcmd.RESTConfigFromKubeConfig(secret.Data["config"])
}
