package dedicated

import (
	"github.com/tidbcloud/observability/test/webconsolee2e/framework"
)

// RegisterDedicatedCases registers all test cases for dedicated clusters
func RegisterDedicatedCases(fw *framework.TestFramework) {
	// === Old path test cases (always run) ===
	fw.Register(
		// GetClusterRoute must run first to get openReadUri values
		NewGetClusterRouteCase(),
		// KeyVisualQuery case (config API)
		NewKeyVisualQueryCase(),
		// KeyVisualHeatmaps case (heatmaps API)
		NewKeyVisualHeatmapsCase("written_bytes"),
		// StmtTypes case (SQL statements types API)
		NewStmtTypesCase(),
		// StmtList case (SQL statements list API)
		NewStmtListCase(),
		// SlowLogList case (slow query list API)
		NewSlowLogListCase(),
		// AlertsList case (alerts API)
		NewAlertsCase(),
		// MonitorAlertRules case (monitor alert rules API)
		NewMonitorAlertRulesCase(),
		// MonitorAlertRulesUpdate case (update alert rules API, depends on MonitorAlertRules)
		NewMonitorAlertRulesUpdateCase(),
	)
}

// RegisterDedicatedCasesWithNewPath registers test cases including new path variants
func RegisterDedicatedCasesWithNewPath(fw *framework.TestFramework) {
	// === Old path test cases ===
	fw.Register(
		// GetClusterRoute must run first to get openReadUri values
		NewGetClusterRouteCase(),
		// KeyVisualQuery case (config API) - uses ClinicURL, no newpath variant needed
		NewKeyVisualQueryCase(),
		// KeyVisualHeatmaps case (heatmaps API) - uses ClinicURL, no newpath variant needed
		NewKeyVisualHeatmapsCase("written_bytes"),
		// StmtTypes case (SQL statements types API) - uses ClinicURL, no newpath variant needed
		NewStmtTypesCase(),
		// StmtList case (SQL statements list API) - uses ClinicURL, no newpath variant needed
		NewStmtListCase(),
		// SlowLogList case (slow query list API) - uses ClinicURL, no newpath variant needed
		NewSlowLogListCase(),
		// AlertsList case (alerts API)
		NewAlertsCase(),
		// MonitorAlertRules case (monitor alert rules API)
		NewMonitorAlertRulesCase(),
		// MonitorAlertRulesUpdate case (update alert rules API, depends on MonitorAlertRules)
		NewMonitorAlertRulesUpdateCase(),
	)

	// === New path test cases (only when EnableNewPath is true) ===
	fw.Register(
		// GetClusterRouteNewPath - new path version
		NewGetClusterRouteNewPathCase(),
		// MetricsQueryRangeNewPath depends on GetClusterRouteNewPath
		NewMetricsQueryRangeNewPathCase("", 120),
		// AlertsListNewPath - new path version
		NewAlertsNewPathCase(),
		// MonitorAlertRulesNewPath - new path version
		NewMonitorAlertRulesNewPathCase(),
		// MonitorAlertRulesUpdateNewPath - new path version, depends on MonitorAlertRulesNewPath
		NewMonitorAlertRulesUpdateNewPathCase(),
	)
}
