package datainit

import (
	"github.com/pingcap/dbaas/billing2/db"
	"github.com/pingcap/dbaas/billing2/db/entity"
	"github.com/pingcap/dbaas/billing2/utils/panicIf"
	"github.com/shopspring/decimal"
)

const (
	AWSNodeUnit                = "node:aws:us-east-1:DEPLOY_TYPE_DEDICATED:c5.2xlarge"
	AWSDataTransferCrossAZUnit = "network-traffic:aws:cross_az"
	AWSServerlessRUUnit        = "serverless-request-unit:aws:us-east-1"
	AWSServerlessStorageUnit   = "serverless-row-storage:aws:us-east-1"
	GCPNodeUnit                = "node:gcp:us-west-2:DEPLOY_TYPE_DEDICATED:c5.2xlarge"
	GCPDataTransferCrossAZUnit = "network-traffic:gcp:cross_az"
	SupportCommitmentUnit      = "support-plan:commitment"
	EssentialColumnStorageUnit = "serverless-column-storage:aws:us-east-1:essential"
	AWSStarterRuUnit           = "serverless-request-unit:aws:us-east-1:starter"
	AWSPremiumBackupUnit       = "backup-storage:aws:us-east-1:premium:T1"
)

func CreateDefaultUnits() {
	units := []entity.Unit{
		{
			UnitKey:   AWSNodeUnit,
			Category:  "Node Compute Cost",
			Provider:  "AWS",
			Region:    "us-east-1",
			SkuType:   entity.SkuType_Normal,
			PriceType: entity.PriceType_Normal,
			Price:     decimal.RequireFromString("0.01"),
		},
		{
			UnitKey:   GCPNodeUnit,
			Category:  "Node Compute Cost",
			Provider:  "GCP",
			Region:    "us-west-2",
			SkuType:   entity.SkuType_Normal,
			PriceType: entity.PriceType_Normal,
			Price:     decimal.RequireFromString("0.01"),
		},
		{
			UnitKey:   AWSDataTransferCrossAZUnit,
			Category:  "Data Transfer Cost - AWS Same Region",
			Provider:  "AWS",
			SkuType:   entity.SkuType_Normal,
			PriceType: entity.PriceType_Normal,
			Price:     decimal.RequireFromString("0.01"),
		},
		{
			UnitKey:   GCPDataTransferCrossAZUnit,
			Category:  "Data Transfer Cost - GCP Same Region",
			Provider:  "GCP",
			SkuType:   entity.SkuType_Normal,
			PriceType: entity.PriceType_Normal,
			Price:     decimal.RequireFromString("0.01"),
		},
		{
			UnitKey:   AWSServerlessRUUnit,
			Category:  "Serverless Request Unit Cost",
			Provider:  "AWS",
			Region:    "us-east-1",
			PriceType: entity.PriceType_Normal,
			SkuType:   entity.SkuType_Normal,
			Price:     decimal.RequireFromString("0.01"),
		},
		{
			UnitKey:   AWSServerlessStorageUnit,
			Category:  "Serverless Row Storage Cost",
			Provider:  "AWS",
			Region:    "us-east-1",
			SkuType:   entity.SkuType_Normal,
			PriceType: entity.PriceType_Normal,
			Price:     decimal.RequireFromString("0.01"),
		},
		{
			UnitKey:   SupportCommitmentUnit,
			Category:  "Support Plan",
			Provider:  "PingCAP",
			SkuType:   entity.SkuType_Normal,
			PriceType: entity.PriceType_Normal,
			Price:     decimal.RequireFromString("0.01"),
		},
		{
			UnitKey:   EssentialColumnStorageUnit,
			Category:  "Serverless Essential Column Storage Cost",
			Provider:  "AWS",
			Region:    "us-east-1",
			SkuType:   entity.SkuType_Normal,
			PriceType: entity.PriceType_Normal,
			Price:     decimal.RequireFromString("0.01"),
		},
		{
			UnitKey:   AWSStarterRuUnit,
			Category:  "Serverless Starter Request Unit Cost",
			Provider:  "AWS",
			Region:    "us-east-1",
			SkuType:   entity.SkuType_Normal,
			PriceType: entity.PriceType_Normal,
			Price:     decimal.RequireFromString("0.01"),
		},
		{
			UnitKey:   AWSPremiumBackupUnit,
			Category:  "Premium Backup Storage",
			Provider:  "AWS",
			Region:    "us-east-1",
			SkuType:   entity.SkuType_Normal,
			PriceType: entity.PriceType_Normal,
			Price:     decimal.RequireFromString("0.01"),
		},
	}
	for _, ent := range units {
		panicIf.Error(ent.Create(db.GetDB()))
	}
}
