package v1

import (
	"context"
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func TestParseTargetTable(t *testing.T) {
	var (
		dbName    string
		tableName string
		err       error
	)

	type Resp struct {
		DBName    string
		TableName string
		ErrIsNil  bool
	}

	mapper := map[string]Resp{
		"mydb.mytable":                     {"mydb", "mytable", true},
		"`mydb.with.point`.`mytable.name`": {"`mydb.with.point`", "`mytable.name`", true},
		"abcd":                             {"", "", false},
		"sadlks*&*()":                      {"", "", false},
		"abcd.efg.hjks":                    {"abcd.efg", "hjks", true},
	}

	g := NewGomegaWithT(t)

	for k, v := range mapper {
		dbName, tableName, err = ParseTargetTable(k)
		if v.ErrIsNil {
			g.Expect(err).To(BeNil())
		} else {
			g.Expect(err).To(Not(BeNil()))
		}
		g.Expect(dbName).To(Equal(v.DBName))
		g.Expect(tableName).To(Equal(v.TableName))
	}
}

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

	Context("Create Import", func() {
		It("should contains provider type and region label", func() {
			ctx := context.Background()
			pt, _, nt, tpl := prepareCluster()
			c := tpl.DeepCopy()
			Expect(k8sClient.Create(ctx, c)).To(Succeed())

			ipt := &Import{
				ObjectMeta: metav1.ObjectMeta{
					GenerateName: "import-",
					Namespace:    c.Namespace,
				},
				Spec: ImportSpec{
					ClusterName: c.Name,
					Source: Source{
						Format: DataFormatSQL,
						Storage: Storage{
							S3: &S3{},
						},
					},
				},
			}
			Expect(k8sClient.Create(ctx, ipt)).To(Succeed())
			Expect(ipt.Labels[ProviderTypeLabel]).To(Equal(pt.Name))
			Expect(ipt.Labels[RegionLabel]).To(Equal(nt.Spec.Region))
		})
	})
})
