package util

import (
	"fmt"

	"github.com/juju/errors"
	"github.com/pingcap/tidb-operator/pkg/client/clientset/versioned"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"
	"k8s.io/helm/pkg/helm"
)

// CreateK8sClientAndClusterSet creates K8sClient and ClusterSet
func CreateK8sClientAndClusterSet(kubeconfig string, tillerPort int) (k8sCli kubernetes.Interface, clusterCli versioned.Interface, helmCli helm.Interface, err error) {
	var config *rest.Config
	var err1 error
	config, err1 = clientcmd.BuildConfigFromFlags("", kubeconfig)
	if err1 != nil {
		err = errors.Trace(err1)
		return
	}
	k8sCli, err1 = kubernetes.NewForConfig(config)
	if err1 != nil {
		err = errors.Annotate(err1, "can't create kubernetes clientset")
		return
	}

	clusterCli, err1 = versioned.NewForConfig(config)
	if err1 != nil {
		err = errors.Annotate(err1, "can't create tidb cluster clientset")
	}

	opts := []helm.Option{
		helm.Host(fmt.Sprintf("127.0.0.1:%d", tillerPort)),
	}
	helmCli = helm.NewClient(opts...)
	return
}
