package main

type tierUnitMap struct {
	Regions     []string `yaml:"regions,flow"`
	TenantIds   []uint64 `yaml:"tenantIds,flow"`
	TierUnitKey string   `yaml:"tierUnitKey"`
}

type pdTier struct {
	TierName    string `yaml:"tierName" validate:"min=1"`
	TierUnitKey string `yaml:"tierUnitKey" validate:"min=1"`
	NodeNum     int    `yaml:"nodeNum" validate:"gt=0"`
}

type tierCompute struct {
	InstanceType string `yaml:"type" validate:"min=1"`
}

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

type forMigration struct {
	TierName             string   `yaml:"tierName" validate:"min=1"`
	TierDisplayName      string   `yaml:"tierDisplayName" validate:"min=1"`
	NonStandardTenantIds []uint64 `yaml:"nonStandardTenantIds,flow"` // tenantId list
}

type tierYaml struct {
	ComponentType string                   `yaml:"component" validate:"oneof=pd tidb tikv tidb tiflash"`
	DeployType    string                   `yaml:"deployType" validate:"oneof=dedicated shared"`
	Name          string                   `yaml:"name" validate:"min=1"`
	DisplayName   string                   `yaml:"displayName" validate:"min=1"`
	Memo          string                   `yaml:"memo"`
	Default       bool                     `yaml:"default"`
	CpuNum        int                      `yaml:"cpu" validate:"gte=0"`      // cpuNum of devtier will be fixed 0
	MemoryGi      int                      `yaml:"memoryGi" validate:"gte=0"` // memoryGi of devtier will be fixed 0
	TierUnitMap   map[string][]tierUnitMap `yaml:"tierUnitMap"`               // key: aws, gcp
}

type tierUnitYaml struct {
	CloudProvider  string       `yaml:"provider" validate:"oneof=aws gcp"`
	ComponentType  string       `yaml:"component" validate:"oneof=pd tidb tikv tidb tiflash"`
	DeployType     string       `yaml:"deployType" validate:"oneof=dedicated shared"`
	Key            string       `yaml:"key" validate:"min=1"`
	Memo           string       `yaml:"memo"`
	DefaultNodeNum int          `yaml:"defaultNodeNum" validate:"gte=0"`
	Regions        []string     `yaml:"regions,flow"`
	Compute        tierCompute  `yaml:"compute"`
	Storage        *tierStorage `yaml:"storage"`
	PD             *pdTier      `yaml:"pd"`

	ForMigration *forMigration `yaml:"forMigration" validate:"required"`
}
