package main

type nodeDisk struct {
	InstanceType  string `yaml:"type" validate:"oneof=gp2 gp3 pd-ssd local-storage"`
	Iops          int64  `yaml:"iops" validate:"gte=0"`
	ThroughputMi  int64  `yaml:"throughputMBs" validate:"gte=0"`
	MinSizeGi     int64  `yaml:"minSizeGi" validate:"gte=0"`
	MaxSizeGi     int64  `yaml:"maxSizeGi" validate:"gte=0,gtefield=MinSizeGi"`
	DefaultSizeGi int64  `yaml:"defaultSizeGi" validate:"gtefield=MinSizeGi,ltefield=MaxSizeGi"`
}

type pdNode struct {
	NodeName string `yaml:"nodeName" validate:"min=1"`
	NodeNum  int    `yaml:"nodeNum" validate:"gt=0"`
}

type nodeDetail struct {
	Name           string    `yaml:"name" validate:"min=1"`
	DisplayName    string    `yaml:"displayName" validate:"min=1"`
	InstanceType   string    `yaml:"type" validate:"min=1"`
	DeployType     string    `yaml:"topology" validate:"oneof=dedicated shared"`
	CpuNum         int64     `yaml:"cpu" validate:"gte=0"`      // cpuNum of devtier will be fixed 0
	MemoryGi       int64     `yaml:"memoryGi" validate:"gte=0"` // cpuNum of devtier will be fixed 0
	DefaultNodeNum int       `yaml:"defaultNodeNum" validate:"gte=0"`
	Disk           *nodeDisk `yaml:"disk" validate:"required"`
	PD             *pdNode   `yaml:"pd"`
}

type tenantInfo struct {
	TenantId   uint64 `yaml:"tenantId" validate:"min=1"`
	TenantName string `yaml:"tenantName" validate:"min=1"`
}

type nodeYaml struct {
	ComponentType        string        `yaml:"component" validate:"oneof=pd tidb tikv tidb tiflash"`
	CloudProvider        string        `yaml:"provider" validate:"oneof=aws gcp"`
	Regions              []string      `yaml:"regions" validate:"gt=0"`
	NonStandardCustomers []*tenantInfo `yaml:"nonStandardCustomers"`
	Annotation           string        `yaml:"annotation"`
	Node                 *nodeDetail   `yaml:"node" validate:"required"`
}
