package testcases

import (
	"github.com/pingcap/log"
	"github.com/pingcap/test-infra/caselib/pkg/spec"
	"github.com/pingcap/test-infra/caselib/pkg/steps"
	"go.uber.org/zap"
)

var (
	Spec spec.Specification

	cases = make(map[spec.CaseName]func() steps.Step)
)

func GetTestCase() steps.Step {
	name := Spec.CaseSpec.Name
	if step, ok := cases[name]; ok {
		log.Info("find case success", zap.String("case type", string(name)))
		return step()
	}

	log.Error("invalid case type", zap.String("case type", string(name)))
	return nil
}

func AddTestCase(caseName spec.CaseName, fn func() steps.Step) bool {
	_, exists := cases[caseName]
	if exists {
		log.Panic("case already exists", zap.String("name", caseName.String()))
	}
	cases[caseName] = fn
	return true
}
