package cases

import (
	"context"
	"testing"

	"github.com/tidbcloud/dataflow-service-e2e/internal/config"
	"github.com/tidbcloud/dataflow-service-e2e/internal/log"
	. "github.com/tidbcloud/dataflow-service-e2e/internal/model"
)

// Tag keys
const (
	TagKeyDomain   = "domain"
	TagKeyAPIModes = "apiModes"
)

// Tag values for domain
const (
	TagValueDomainCDC    = config.DomainCDC
	TagValueDomainBR     = config.DomainBR
	TagValueDomainCRRF   = config.DomainCRRF
	TagValueDomainDM     = config.DomainDM
	TagValueDomainImport = config.DomainImport
	TagValueDomainExport = config.DomainExport
)

type E2ECase interface {
	Name() string
	Tags() map[string]string
	DeclareDependencyRequirements() map[string]DependencyRequirement
	FulfillDependencyRequirement(requirementName string, entity DependencyEntity)
	SetT(t *testing.T)
	SetLogger(lgr log.SimpleLogger)
	SetContext(ctx context.Context)
	Run()
}
