package fetchconf

import (
	"archive/tar"
	"fmt"
	"io"
	"os"
	"strings"
	"testing"

	"github.com/DataDog/zstd"
	"github.com/onsi/gomega"

	"github.com/pingcap-inc/clinic/pkg/cluster"
	"github.com/pingcap-inc/clinic/pkg/importer/utils"
)

func Test_FetchConfSink(t *testing.T) {
	g := gomega.NewWithT(t)
	clusterID := "1"

	sink, err := NewFetchConfSink(clusterID, "1", nil)
	sink.disablePersistent = true

	g.Expect(err).To(gomega.Succeed())

	file, err := os.Open("../testdata/test.tar")
	g.Expect(err).To(gomega.Succeed())

	err = utils.ReadTarWithReader(tar.NewReader(file), func(fileName string, fh *tar.Header, r io.Reader) {
		sink.Sink(fh, r)
	})
	g.Expect(err).To(gomega.Succeed())

	sink.Close()

	var clusterJSONData []byte

	newtar, err := os.Open(sink.zstdFilePath)
	g.Expect(err).To(gomega.Succeed())
	zr := zstd.NewReader(newtar)
	defer func() {
		zr.Close()
	}()
	g.Expect(err).To(gomega.Succeed())
	err = utils.ReadTarWithReader(tar.NewReader(zr), func(fileName string, fh *tar.Header, r io.Reader) {
		fmt.Println(fh.Name)
		data, err := io.ReadAll(r)
		g.Expect(err).To(gomega.Succeed())
		if strings.HasSuffix(fh.Name, "cluster.json") {
			clusterJSONData = data
		}
	})
	g.Expect(err).To(gomega.Succeed())
	// var cj collector.ClusterJSON
	// err = json.Unmarshal(clusterJSONData, &cj)
	// g.Expect(err).To(gomega.Succeed())

	ci, err := cluster.UnmarshalJSON(clusterJSONData)
	g.Expect(err).To(gomega.Succeed())

	g.Expect(ci.ClusterName).To(gomega.Equal("saos-htap-tidb-cluster-prod"))
	fmt.Println(sink.file.Name())
}
