package resource

import validation "github.com/Thearas/ozzo-validation/v4"

const (
	TiDBDrainerReady    TiDBDrainerPhase = "Ready"
	TiDBDrainerNotReady TiDBDrainerPhase = "NotReady"
)

type TiDBDrainer struct {
	ResourceHandle `json:",inline"`

	Spec   TiDBDrainerSpec   `json:"spec"`
	Status TiDBDrainerStatus `json:"status"`
}

// TiDBDrainerSpec wraps https://github.com/pingcap/tidb-operator/blob/v1.2.4/charts/tidb-drainer/values.yaml
type TiDBDrainerSpec struct {
	Timezone         string               `json:"timezone,omitempty"`
	ClusterName      string               `json:"clusterName"`
	ClusterVersion   string               `json:"clusterVersion"`
	BaseImage        string               `json:"baseImage"`
	ImagePullPolicy  string               `json:"imagePullPolicy,omitempty"`
	StorageClassName string               `json:"storageClassName,omitempty"`
	LogLevel         string               `json:"logLevel,omitempty"`
	Storage          string               `json:"storage,omitempty"`
	DisableDetect    bool                 `json:"disableDetect"`
	InitialCommitTs  string               `json:"initialCommitTs,omitempty"`
	Config           string               `json:"config,omitempty"`
	SyncToMySQLAddr  string               `json:"syncToMySQLAddr,omitempty"`
	Resources        ResourceRequirements `json:"resources"`
}

func (t *TiDBDrainerSpec) Validate() error {
	return validation.ValidateStruct(t,
		validation.Field(&t.ClusterName, validation.Required),
		validation.Field(&t.ClusterVersion, validation.Required),
		validation.Field(&t.BaseImage, validation.Required),
	)
}

type TiDBDrainerPhase string

type TiDBDrainerStatus struct {
	Phase TiDBDrainerPhase `json:"phase"`
}
