package core

import (
	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"
	"github.com/tidbcloud/tidbcloud-provider/pkg/util"

	"github.com/tidbcloud/tidbcloud-provider/api/v1alpha1"
	"k8s.io/utils/pointer"
)

var _ = Describe("Cluster", func() {

	It("Component overlay should properly customize tc", func() {
		tc := map[string]interface{}{
			"spec": map[string]interface{}{
				"tikv": map[string]interface{}{
					"config": map[string]interface{}{
						"raftstore": map[string]interface{}{
							"apply-pool-size": 1,
						},
					},
					"version": "v4.0.6",
				},
				"tidb": map[string]interface{}{},
			},
		}
		spec, err := util.GetChild(tc, "spec")
		Expect(err).To(Succeed())
		tikvParameter := &v1alpha1.ComponentParameters{
			RawConfig: pointer.StringPtr(`[raftstore]
apply-pool-size = 2
`),
			VersionOverride: pointer.StringPtr("v4.0.7"),
		}
		tidbParameter := &v1alpha1.ComponentParameters{
			RawConfig:       pointer.StringPtr(`token-limit = 2000`),
			VersionOverride: pointer.StringPtr("v4.0.7"),
		}
		err = componentOverlay(spec, "tikv", tikvParameter)
		Expect(err).To(Succeed())
		err = componentOverlay(spec, "tidb", tidbParameter)
		Expect(err).To(Succeed())
		kvSpec, err := util.GetChild(tc, "spec", "tikv")
		Expect(err).To(Succeed())
		dbSpec, err := util.GetChild(tc, "spec", "tidb")
		Expect(err).To(Succeed())
		Expect(kvSpec["version"]).To(Equal("v4.0.7"))
		Expect(dbSpec["version"]).To(Equal("v4.0.7"))
		kvRaftConfig, err := util.GetChild(kvSpec, "config", "raftstore")
		dbConfig, err := util.GetChild(dbSpec, "config")
		Expect(kvRaftConfig["apply-pool-size"]).To(Equal(int64(2)))
		Expect(dbConfig["token-limit"]).To(Equal(int64(2000)))
	})
})
