package dm

import (
	"fmt"
	"github.com/tidbcloud/dataflow-service-e2e/cases"
	"github.com/tidbcloud/dataflow-service-e2e/cases/essential/common"
	"github.com/tidbcloud/dataflow-service-e2e/internal/config"
	. "github.com/tidbcloud/dataflow-service-e2e/internal/model"
	"github.com/tidbcloud/dataflow-service-e2e/internal/tidbcloud/essential"
)

type DMInvalidPrecheckCase struct {
	cases.BaseCase
	provider CloudProviderType
}

func NewDMInvalidPrecheckCase(provider CloudProviderType) cases.E2ECase {
	return &DMInvalidPrecheckCase{provider: provider}
}
func (c *DMInvalidPrecheckCase) Name() string {
	return fmt.Sprintf("%sEssentialV1DMInvalidPrecheckSmoke", c.provider)
}
func (c *DMInvalidPrecheckCase) Tags() map[string]string {
	return map[string]string{cases.TagKeyDomain: config.DomainDM, cases.TagKeyAPIModes: common.APIModesBoth}
}
func (c *DMInvalidPrecheckCase) DeclareDependencyRequirements() map[string]DependencyRequirement {
	region := config.GlobalConfig.DefaultRegionOf(c.provider)
	return map[string]DependencyRequirement{
		"essential": &TiDBServerlessRequirement{
			Dedicated: true,
			TiDBServerlessDimensions: TiDBServerlessDimensions{
				CloudProvider: c.provider,
				Region:        region,
				ServicePlan:   essential.ServicePlanEssential,
			},
		},
		"mysql": &MySQLRequirement{MySQLDimensions: MySQLDimensions{
			NetworkType: DataflowNetworkTypeNetworkTypePublic,
		}},
	}
}
func (c *DMInvalidPrecheckCase) Run() {
	cluster, source := c.TiDBServerless("essential"), c.MySQL("mysql")
	spec := essential.NewMigrationSpec("", source, "test1", "lifecycle_marker")
	c.Step("reject invalid DM precheck request", func() error {
		_, err := essential.NewDMClient().PrecheckSpec(c.Context(), cluster, spec)
		return validateRejected(err)
	})
}
