package k8s

import (
	"encoding/json"
	"fmt"

	corev1 "k8s.io/api/core/v1"
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"

	apiresource "github.com/pingcap/test-infra/common/model/resource"
	"github.com/pingcap/test-infra/common/model/rms/request"
	"github.com/pingcap/test-infra/sdk/resource"
)

var _ resource.Testbed = &Testbed{}

type Testbed struct {
	KubeClientSet
	apiresource.TestBed
	// TODO(@mahjonp): replace it with the testbed cr object
	cm        *corev1.ConfigMap
	podGroups []*unstructured.Unstructured
}

func (t *Testbed) Handle() apiresource.ResourceHandle {
	return t.TestBed.ResourceHandle
}

func (t *Testbed) GetSpec() (*request.CreateTestbedRequest, error) {
	if t.cm == nil {
		return nil, fmt.Errorf("cannot get the testbed spec")
	}
	if spec, exist := t.cm.Data["raw"]; exist {
		req := new(request.CreateTestbedRequest)
		err := json.Unmarshal([]byte(spec), req)
		return req, err
	}
	return nil, fmt.Errorf("cannot get the testbed spec")
}
