/*
Copyright (c) Edgeless Systems GmbH

SPDX-License-Identifier: AGPL-3.0-only
*/

// Provides functionality to easily interact with the K8s API, which can be used
// from any e2e test.
package kubectl

import (
	"fmt"
	"os"

	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
)

// New creates a new k8s client. The kube config file is expected to be set
// via environment variable KUBECONFIG or located at ./constellation-admin.conf.
func New() (*kubernetes.Clientset, error) {
	cfgPath := ""
	if envPath := os.Getenv("KUBECONFIG"); envPath != "" {
		cfgPath = envPath
		fmt.Printf("K8s config path empty. Using environment variable %s=%s.\n", "KUBECONFIG", envPath)
	} else {
		cfgPath = "constellation-admin.conf"
		fmt.Printf("K8s config path empty. Assuming '%s'.\n", cfgPath)
	}

	kubeConfig, err := clientcmd.BuildConfigFromFlags("", cfgPath)
	if err != nil {
		return nil, err
	}

	k8sClient, err := kubernetes.NewForConfig(kubeConfig)
	if err != nil {
		return nil, err
	}

	return k8sClient, nil
}
