//nolint:gomnd
package entity

import (
	"gorm.io/gorm"
)

func InitDataBase(db *gorm.DB) error {
	if err := db.Session(&gorm.Session{}).Create(AllChangefeedInstanceTypes).Error; err != nil {
		return err
	}
	if err := db.Session(&gorm.Session{}).Create(AllCDCInstanceTypes).Error; err != nil {
		return err
	}
	if err := db.Session(&gorm.Session{}).Create(AllCDCMachineTypes).Error; err != nil {
		return err
	}
	return nil
}

//nolint:gomnd
var AllCDCInstanceTypes = []CDCInstanceType{
	{
		SpecificationCode: "2rcu",
		RCUNum:            2,
		CpuNum:            2,
		MemoryGi:          8,
		Replicas:          1,
	},
	{
		SpecificationCode: "4rcu",
		RCUNum:            4,
		CpuNum:            4,
		MemoryGi:          16,
		Replicas:          1,
	},
	{
		SpecificationCode: "8rcu",
		RCUNum:            8,
		CpuNum:            8,
		MemoryGi:          32,
		Replicas:          1,
	},
	{
		SpecificationCode: "16rcu",
		RCUNum:            16,
		CpuNum:            8,
		MemoryGi:          32,
		Replicas:          2,
	},
	{
		SpecificationCode: "24rcu",
		RCUNum:            24,
		CpuNum:            8,
		MemoryGi:          32,
		Replicas:          3,
	},
	{
		SpecificationCode: "32rcu",
		RCUNum:            32,
		CpuNum:            8,
		MemoryGi:          32,
		Replicas:          4,
	},
	{
		SpecificationCode: "40rcu",
		RCUNum:            40,
		CpuNum:            8,
		MemoryGi:          32,
		Replicas:          5,
	},
	{
		SpecificationCode: "48rcu",
		RCUNum:            48,
		CpuNum:            8,
		MemoryGi:          32,
		Replicas:          6,
	},
	{
		SpecificationCode: "64rcu",
		RCUNum:            64,
		CpuNum:            16,
		MemoryGi:          64,
		Replicas:          4,
	},
	{
		SpecificationCode: "80rcu",
		RCUNum:            80,
		CpuNum:            16,
		MemoryGi:          64,
		Replicas:          5,
	},
	{
		SpecificationCode: "96rcu",
		RCUNum:            96,
		CpuNum:            16,
		MemoryGi:          64,
		Replicas:          6,
	},
	{
		SpecificationCode: "128rcu",
		RCUNum:            128,
		CpuNum:            32,
		MemoryGi:          128,
		Replicas:          4,
	},
	{
		SpecificationCode: "160rcu",
		RCUNum:            160,
		CpuNum:            32,
		MemoryGi:          128,
		Replicas:          5,
	},
	{
		SpecificationCode: "192rcu",
		RCUNum:            192,
		CpuNum:            32,
		MemoryGi:          128,
		Replicas:          6,
	},
	{
		SpecificationCode: "256rcu",
		RCUNum:            256,
		CpuNum:            64,
		MemoryGi:          256,
		Replicas:          4,
	},
}

//nolint:gomnd
var AllCDCMachineTypes = []*CDCMachineType{
	{
		CpuNum:              2,
		MemoryGi:            8,
		StorageGi:           250,
		AWSStorageType:      "gp3",
		GCPStorageType:      "pd-balanced",
		AzureStorageType:    "premiumv2",
		AliCloudStorageType: "cloud-ssd",
		ThroughputMbs:       400,
		Iops:                4000,
	},
	{
		CpuNum:              4,
		MemoryGi:            16,
		StorageGi:           250,
		AWSStorageType:      "gp3",
		GCPStorageType:      "pd-balanced",
		AzureStorageType:    "premiumv2",
		AliCloudStorageType: "cloud-ssd",
		ThroughputMbs:       400,
		Iops:                4000,
	},
	{
		CpuNum:              8,
		MemoryGi:            32,
		StorageGi:           500,
		AWSStorageType:      "gp3",
		GCPStorageType:      "pd-balanced",
		AzureStorageType:    "premiumv2",
		AliCloudStorageType: "cloud-ssd",
		ThroughputMbs:       500,
		Iops:                6000,
	},
	{
		CpuNum:              16,
		MemoryGi:            64,
		StorageGi:           1000,
		AWSStorageType:      "gp3",
		GCPStorageType:      "pd-balanced",
		AzureStorageType:    "premiumv2",
		AliCloudStorageType: "cloud-ssd",
		ThroughputMbs:       1000,
		Iops:                12000,
	},
	{
		CpuNum:              32,
		MemoryGi:            128,
		StorageGi:           2000,
		AWSStorageType:      "gp3",
		GCPStorageType:      "pd-balanced",
		AzureStorageType:    "premiumv2",
		AliCloudStorageType: "cloud-ssd",
		ThroughputMbs:       1000,
		Iops:                12000,
	},
	{
		CpuNum:              64,
		MemoryGi:            256,
		StorageGi:           4000,
		AWSStorageType:      "gp3",
		GCPStorageType:      "pd-balanced",
		AzureStorageType:    "premiumv2",
		AliCloudStorageType: "cloud-ssd",
		ThroughputMbs:       1000,
		Iops:                12000,
	},
}

var AllChangefeedInstanceTypes = []*ChangefeedSpecification{
	{
		Name:     "2rcu",
		RCUNum:   2,
		RPSLimit: 5000,
	},
	{
		Name:     "4rcu",
		RCUNum:   4,
		RPSLimit: 10000,
	},
	{
		Name:     "8rcu",
		RCUNum:   8,
		RPSLimit: 20000,
	},
	{
		Name:     "16rcu",
		RCUNum:   16,
		RPSLimit: 40000,
	},
	{
		Name:     "24rcu",
		RCUNum:   24,
		RPSLimit: 60000,
	},
	{
		Name:     "32rcu",
		RCUNum:   32,
		RPSLimit: 80000,
	},
	{
		Name:     "40rcu",
		RCUNum:   40,
		RPSLimit: 100000,
	},
	{
		Name:     "64rcu",
		RCUNum:   64,
		RPSLimit: 160000,
	},
	{
		Name:     "96rcu",
		RCUNum:   96,
		RPSLimit: 240000,
	},
	{
		Name:     "128rcu",
		RCUNum:   128,
		RPSLimit: 320000,
	},
	{
		Name:     "192rcu",
		RCUNum:   192,
		RPSLimit: 480000,
	},
	{
		Name:     "256rcu",
		RCUNum:   256,
		RPSLimit: 640000,
	},
	{
		Name:     "320rcu",
		RCUNum:   320,
		RPSLimit: 800000,
	},
	{
		Name:     "384rcu",
		RCUNum:   384,
		RPSLimit: 960000,
	},
}
