package bss

import (
	"github.com/shopspring/decimal"
	"github.com/tidbcloud/qa-PlatformAPIAuto/common"
)

const (
	PlanFreeTrial       = "free_trial"
	PlanPoC             = "poc"
	PlanOnDemand        = "on_demand"
	FutureCheckDate int = 11
)

// all cases detail can be seen in : https://pingcap-cn.feishu.cn/wiki/IZJDw43erimH9BknjPScoBD9nUh
var onDemandCreditBody1 = &common.AddCredits{
	DiscountEnabled: true,
	TotalCredits:    "10",
	Usage:           "prepayment",
}

var onDemandCreditBody2 = &common.AddCredits{
	DiscountEnabled: false,
	TotalCredits:    "10",
	Usage:           "prepayment",
}

var onDemandCreditBody3 = &common.AddCredits{
	DiscountEnabled: true,
	TotalCredits:    "5",
	Usage:           "prepayment",
}

var onDemandCreditBody4 = &common.AddCredits{
	DiscountEnabled: true,
	TotalCredits:    "10",
	Usage:           "prepayment",
}

var onDemandDiscountBody1 = &common.AddDiscount{
	Value: decimal.NewFromFloat(0.5),
	Usage: "commitment_plan",
}

var onDemandDiscountBody2 = &common.AddDiscount{
	Value: decimal.NewFromFloat(0.5),
	Usage: "commitment_plan",
}
var onDemandDiscountBody3 = &common.AddDiscount{
	Value: decimal.NewFromFloat(0.3),
	Usage: "commitment_plan",
}
var onDemandDiscountBody4 = &common.AddDiscount{
	Value: decimal.NewFromFloat(0.4),
	Usage: "commitment_plan",
}

// metering 1, node compute, cost =
// '60', '0.2208',  - '272' , '1'
var onDemandMeteringBody1 = &common.UnitCosts{
	Unit: "node:aws:us-west-2:DEPLOY_TYPE_DEDICATED:m6g.large",
	Cost: 272,
	Labels: map[string]string{
		"QETest":    "true",
		"cluster":   "mockBillingCluster",
		"project":   "default project",
		"component": "COMPONENT_TYPE_TIDB"},
}

// metering 2, changefeed, cost =
// '960', '2.091199999999680',  - '2296' , '5'
var onDemandMeteringBody2 = &common.UnitCosts{
	Unit: "ticdc-tcu:aws:us-west-2",
	Cost: 2296,
	Labels: map[string]string{
		"QETest":  "true",
		"cluster": "mockBillingCluster",
		"project": "default project"},
}

// metering 3, node storage, cost =
// '600', '0.001090000000200',  - '5504590' , '10'
var onDemandMeteringBody3 = &common.UnitCosts{
	Unit: "disk-storage:aws:us-east-1:gp3",
	Cost: 5504590,
	Labels: map[string]string{
		"QETest":     "true",
		"iops":       "3000",
		"throughput": "125",
		"cluster":    "mockBillingCluster",
		"project":    "default project",
		"component":  "COMPONENT_TYPE_TIKV"},
}

// metering 4, backup, cost =
// '2', '0.000001064666666',  - '18785222' , '10'
var onDemandMeteringBody4 = &common.UnitCosts{
	Unit: "backup-storage:aws:us-west-2",
	Cost: 18785225,
	Labels: map[string]string{
		"QETest":    "true",
		"region":    "local",
		"cluster":   "mockBillingCluster",
		"project":   "default project",
		"component": "Storage Cost"},
}
var onDemandMeteringBody5 = &common.UnitCosts{
	Unit: "node:aws:us-west-2:DEPLOY_TYPE_DEDICATED:m6g.large",
	Cost: 272,
	Labels: map[string]string{
		"QETest":    "true",
		"cluster":   "mockBillingCluster",
		"project":   "default project",
		"component": "COMPONENT_TYPE_TIDB"},
}

// expect bills result
var onDemandExpectInvoices string = "2"
var OndemandExpectBills = ExpectBillsResult{
	CheckItems: []BillsCheck{
		// case 1&5 ,compute
		{
			Amount:       "2",
			BillableCost: "2",
			CreditUsage:  "0",
			DiscountCost: "0",
			ClusterName:  "mockBillingCluster",
			ProjectName:  "default project",
			Service:      "TiDB Dedicated - Node Compute - TiDB",
		},
		// case 2, changefeed
		{
			Amount:       "5",
			BillableCost: "0",
			CreditUsage:  "5",
			DiscountCost: "0",
			ClusterName:  "mockBillingCluster",
			ProjectName:  "default project",
			Service:      "TiDB Dedicated - Changefeed - Replication Capacity Units",
		},
		// case 3,storage
		{
			Amount:       "10",
			BillableCost: "0",
			CreditUsage:  "3",
			DiscountCost: "7",
			ClusterName:  "mockBillingCluster",
			ProjectName:  "default project",
			Service:      "TiDB Dedicated - Node Storage - TiKV",
		},
		// case 4,backup
		{
			Amount:       "10",
			BillableCost: "0",
			CreditUsage:  "4",
			DiscountCost: "6",
			ClusterName:  "mockBillingCluster",
			ProjectName:  "default project",
			Service:      "TiDB Dedicated - Backup - Single Region Storage",
		},
	},
}
