package models

const (
	NextGenMeteringLogicalClusterID        = "cluster_id"
	NextGenMeteringSourceName              = "source_name"
	NextGenMeteringRegion                  = "region"
	NextGenMeteringSystemID                = "SYSTEM"
	NextGenMeteringOLAPRU                  = "olap_ru"
	NextGenMeteringOLTPRU                  = "oltp_ru"
	NextGenMeteringTiDBRUV2                = "tidb_ru_v2"
	NextGenMeteringTiKVRUV2                = "tikv_ru_v2"
	NextGenMeteringTiFlashRUV2             = "tiflash_ru_v2"
	NextGenMeteringCrossAZTraffic          = "cross_az_traffic_bytes"
	NextGenMeteringOutBoundBytes           = "outBound_bytes"
	NextGenMeteringPrivateOutBoundBytes    = "private_outBound_bytes"
	NextGenMeteringPublicOutBoundBytes     = "public_outBound_bytes"
	NextGenMeteringCrossZoneBytes          = "crossZone_bytes"
	NextGenMeteringTaskID                  = "task_id"
	NextGenMeteringTaskType                = "task_type"
	NextGenMeteringGetExtRequests          = "get_external_requests"
	NextGenMeteringPutExtRequests          = "put_external_requests"
	NextGenMeteringReadDataBytes           = "read_data_bytes"
	NextGenMeteringWriteDataBytes          = "write_data_bytes"
	NextGenMeteringVersion                 = "version"
	NextGenMeteringRowStorageSize          = "row_based_storage_size"
	NextGenMeteringColumnStorageSize       = "column_based_storage_size"
	NextGenMeteringWriteRequests           = "write_requests"
	NextGenMeteringWrittenBytes            = "written_bytes"
	NextGenMeteringTiKVDataDiskCount       = "tikv_data_disk_count"
	NextGenMeteringTiKVDataDiskIOPS        = "tikv_data_disk_iops"
	NextGenMeteringTiKVDataDiskTP          = "tikv_data_disk_throughput"
	NextGenMeteringTiKVLogDiskCount        = "tikv_log_disk_count"
	NextGenMeteringTiKVLogDiskIOPS         = "tikv_log_disk_iops"
	NextGenMeteringTiKVLogDiskTP           = "tikv_log_disk_throughput"
	NextGenMeteringTiFlashComputeDiskCount = "tiflash_compute_disk_count"
	NextGenMeteringTiFlashComputeDiskIOPS  = "tiflash_compute_disk_iops"
	NextGenMeteringTiFlashComputeDiskTP    = "tiflash_compute_disk_throughput"
	NextGenMeteringTiFlashWriteDiskCount   = "tiflash_write_disk_count"
	NextGenMeteringTiFlashWriteDiskIOPS    = "tiflash_write_disk_iops"
	NextGenMeteringTiFlashWriteDiskTP      = "tiflash_write_disk_throughput"
	NextGenMeteringTiKVDataDiskType        = "tikv_data_disk_type"
	NextGenMeteringTiKVLogDiskType         = "tikv_log_disk_type"
	NextGenMeteringTiFlashComputeDiskType  = "tiflash_compute_disk_type"
	NextGenMeteringTiFlashWriteDiskType    = "tiflash_write_disk_type"
	NextGenMeteringIncrementalWriteByte    = "write_bytes"
	NextGenMeteringWorkerNodeVCPU          = "vcpu_usage"
	NextGenMeteringNodeType                = "node_type"
	NextGenMeteringReservedVCPUUsage       = "reserved_vcpu_usage"
	NextGenMeteringBackupID                = "backup_id"
	NextGenMeteringBackupSizeGB            = "backup_size_gb"
)
const (
	NextGenMetaMinRCU                   = "minRcu"
	NextGenMetaMaxRCU                   = "maxRcu"
	NextGenMetaMeteringMaxRCU           = "meteringMaxRcu"
	NextGenMetaTenantID                 = "tenantId"
	NextGenMetaDiskType                 = "dataDiskType"
	NextGenMetaColumnDataDiskType       = "columnComputeDataDiskType"
	NextGenMetaDiskIOPS                 = "dataIops"
	NextGenMetaDiskThroughput           = "dataThroughput"
	NextGenMetaStorageEncryptionEnabled = "storageEncryptionEnabled"
	NextGenMetaDeleted                  = "deleted"
	NextGenMetaRUVersion                = "ru_version"
	NextGenMetaBackupStorageV2          = "backup-storage-v2"
	NextGenMetaPlan                     = "plan"
	NextGenMetaCapacityMode             = "capacityMode"
)

const (
	NextGenCategoryResourceManager = "resource-manager"
	NextGenCategoryProxy           = "proxy"
	NextGenCategoryDXF             = "dxf"
	NextGenCategoryStorageSize     = "storage-size"
	NextGenCategoryDFSStats        = "dfs-stats"
	NextGenCategoryControlPlane    = "control-plane"
	NextGenCategoryBackup          = "backup"
	NextGenCategoryWorkerNode      = "worker-node"
	NextGenCategoryReservedNode    = "reserved-node"
	NextGenCategoryManualBackup    = "manual-backup"
	NextGenCategoryFlexBackup      = "flex-backup"
)

const (
	NextGenSourceNamePD       = "pd"
	NextGenSourceNameProxy    = "proxy"
	NextGenSourceNameDXF      = "dxf"
	NextGenSourceNameDFSStats = "rfengine"
)

const (
	NextGenSKUOLAP = "olap"
	NextGenSKUOLTP = "oltp"
)
const (
	NextGenSKULabelKeyClusterID                  = "clusterID"
	NextGenSKULabelKeySharedPoolID               = "sharedPoolID"
	NextGenSKULabelKeySourceUnit                 = "sourceUnit"
	NextGenSKULabelKeyIntervalMin                = "intervalMin"
	NextGenSKULabelKeyIntervalMax                = "intervalMax"
	NextGenSKULabelKeyIntervalValue              = "intervalValue"
	NextGenSKULabelKeyOLAPRU                     = "olapRU"
	NextGenSKULabelKeyOLTPRU                     = "oltpRU"
	NextGenSKULabelKeyTiDBRUV2                   = "tidbRUV2"
	NextGenSKULabelKeyTiKVRUV2                   = "tikvRUV2"
	NextGenSKULabelKeyTiFlashRUV2                = "tiflashRUV2"
	NextGenSKULabelKeyTaskID                     = "taskID"
	NextGenSKULabelKeyTaskType                   = "taskType"
	NextGenSKULabelKeyVersion                    = "version"
	NextGenSKULabelKeyGetExtReq                  = "getExternalRequests"
	NextGenSKULabelKeyPutExtReq                  = "putExternalRequests"
	NextGenSKULabelKeyReadBytes                  = "readDataBytes"
	NextGenSKULabelKeyWriteBytes                 = "writeDataBytes"
	NextGenSKULabelKeyDiskType                   = "diskType"
	NextGenSKULabelKeyStorageBytes               = "storageBytes"
	NextGenSKULabelKeySourceName                 = "sourceName"
	NextGenSKULabelKeyStorageCategory            = "storageCategory"
	NextGenSKULabelKeyStorageTier                = "storageTier"
	NextGenSKULabelKeyStorageUsage               = "storageUsage"
	NextGenSKULabelKeyBackupType                 = "backupType"
	NextGenSKULabelKeyOriginalBytes              = "originalBytes"
	NextGenSKULabelKeyBackupID                   = "backupID"
	NextGenSKULabelKeyTiFlashWriteDiskType       = "tiflashWriteDiskType"
	NextGenSKULabelKeyTiFlashWriteIOPS           = "tiflashWriteIOPS"
	NextGenSKULabelKeyTiFlashWriteIOPSUnit       = "tiflashWriteIOPSUnit"
	NextGenSKULabelKeyTiFlashWriteThroughput     = "tiflashWriteThroughput"
	NextGenSKULabelKeyTiFlashWriteThroughputUnit = "tiflashWriteThroughputUnit"
	NextGenSKULabelKeyExtMeta                    = "extMeta"
	NextGenSKULabelKeyNodeType                   = "nodeType"
)

const (
	NextGenSKUTypePublic  = "public"
	NextGenSKUTypePrivate = "private"
)

const (
	NextGenSKURCU                           = "rcu"
	NextGenSKUDataTransferOut               = "data-transfer-out"
	NextGenSKUDataTransferCrossAZ           = "data-transfer-cross-az"
	NextGenSKUBackupStorage                 = "backup-storage"
	NextGenSKUTaskRU                        = "task-ru"
	NextGenSKUDiskStorageSize               = "disk-storage-size"
	NextGenSKUDiskStorageSizeDualEncryption = "disk-storage-size-dual-encryption"
	NextGenSKUDiskIOPS                      = "disk-iops"
	NextGenSKUDiskThroughput                = "disk-throughput"
	NextGenSKUVCPU                          = "vcpu"

	NextGenSKUServerlessRowStorage                  = "serverless-row-storage"
	NextGenSKUServerlessColumnStorage               = "serverless-column-storage"
	NextGenSKUServerlessRowStorageDualEncryption    = "serverless-row-storage-dual-encryption"
	NextGenSKUServerlessColumnStorageDualEncryption = "serverless-column-storage-dual-encryption"
	NextGenSKUServerlessRequestCapacityUnit         = "serverless-request-capacity-unit"
)

const (
	PlanPremium   = "premium"
	PlanEssential = "essential"
	PlanBYOC      = "byoc"
	PlanReserved  = "reserved"
)

const (
	NextGenStorageTierStandard = "standard"
	NextGenStorageTierPlus     = "plus"
	NextGenStorageLayoutRow    = "row"
	NextGenStorageLayoutColumn = "column"
)

const (
	NextGenProxyNetworkTypePublic  = "public"
	NextGenProxyNetworkTypePrivate = "private"
)

const (
	NextgenFixMinRU = "5000"
)

const (
	NextGenBackupTypeAuto   = "auto"
	NextGenBackupTypeManual = "manual"
	NextGenBackupTypeFlex   = "daily"
)

// GetStorageTierByDiskType returns the storage tier based on disk type
// io2 -> plus, gp3 -> standard, others -> standard
func GetStorageTierByDiskType(diskType string) string {
	switch diskType {
	case "io2":
		return NextGenStorageTierPlus
	case "gp3":
		return NextGenStorageTierStandard
	default:
		return NextGenStorageTierStandard
	}
}

// GetStorageLayoutByComponent returns the storage layout based on component name
// tikv/tikv-log -> row, tiflash-* -> column
func GetStorageLayoutByComponent(component string) string {
	switch component {
	case "tikv", "tikv-log":
		return NextGenStorageLayoutRow
	default:
		// tiflash, tiflash-compute, tiflash-write, etc.
		return NextGenStorageLayoutColumn
	}
}
