package model

type TrafficMeta struct {
	Customer   string `json:"customer,omitempty"`
	Scenario   string `json:"scenario,omitempty"`
	Maintainer string `json:"maintainer,omitempty"`

	Tool        string `json:"tool,omitempty"`
	Description string `json:"description,omitempty"`
}

type TrafficFeature struct {
	RwRatio            []string `json:"rw_ratio,omitempty"`
	SpecialFields      []string `json:"special_fields,omitempty"`
	CoveredFuncs       []string `json:"covered_funcs,omitempty"`
	Tags               []string `json:"tags"`
	Indexed            bool     `json:"indexed"`
	DataSize           string   `json:"data_size"`
	TestRoutine        string   `json:"test_routine"`
	InReleaseTest      bool     `json:"in_release_test"`
	PrepareMethods     []string `json:"prepare_methods,omitempty"`
	WorkloadType       string   `json:"workload_type,omitempty"`
	TrafficPattern     string   `json:"traffic_pattern,omitempty"`
	Schema             string   `json:"schema,omitempty"`
	SupportedProtocols []string `json:"supported_protocols,omitempty"`
}

type TrafficTmpl struct {
	ID      string         `json:"id,omitempty"`
	Name    string         `json:"name,omitempty"`
	Meta    TrafficMeta    `json:"meta,omitempty"`
	Feature TrafficFeature `json:"feature,omitempty"`
}

func (t TrafficTmpl) WorkloadType() WorkloadType {
	switch t.Feature.WorkloadType {
	case "HTAP":
		return WorkloadTypeHTAP
	case "OLTP", "TP":
		return WorkloadTypeOLTP
	case "OLAP", "AP":
		return WorkloadTypeOLAP
	default:
		return ""
	}
}

type TrafficParams struct {
	// Cluster Meta
	ClusterID string `json:"cluster_id"`

	// Type      string `json:"type"`
	DBHost   string `json:"db_host"`
	DBPort   int    `json:"db_port"`
	PDHost   string `json:"pd_host"`
	PDPort   int    `json:"pd_port"`
	User     string `json:"db_user,omitempty"`
	Password string `json:"db_password,omitempty"`

	// Workload Meta
	WorkloadName string         `json:"workload_name"`
	Params       map[string]any `json:"workload"`
}
