package instancemetering

import (
	"os"
	"testing"

	"github.com/tidbcloud/metering/pkg/common/config"
	"github.com/tidbcloud/metering/pkg/common/constants"
)

var testStartTime int64 = 1725521555
var testDataRoot = "data"
var testDataPath = "data/ut"
var billingSwitchTime int64 = 1728925830

func TestMain(m *testing.M) {
	originalConfig := config.GetConfig()
	originalConfig.LogLevel = "debug"
	config.Init(config.ServiceConfig{
		Port:        8080,
		MetricsPort: 9999,
		Vendor:      "aws",
		Region:      "us-west-2",
		Env:         "dev",
		LogLevel:    "debug",
		Bucket:      "test-bucket",
		InstanceMeteringConfig: &config.InstanceMeteringConfig{
			StartTime:               testStartTime,
			CloudProviders:          []string{"aws"},
			MgmtGrpcTarget:          "test-grpc-target",
			BillingReportSwitchTime: billingSwitchTime,
			TenantWithSwitchTimes: []config.TenantFilter{
				{
					TenantId:   "9999",
					SwitchTime: billingSwitchTime - 6000 - 120, //should be reported
				},
				{
					TenantId:   "99999",
					SwitchTime: billingSwitchTime - 2000, //should be ingored
				},
				{
					TenantId:   "2222",
					SwitchTime: billingSwitchTime - 6000 - 120, //should be reported
				},
				{
					TenantId:   "22222",
					SwitchTime: billingSwitchTime - 6000 - 120, //should be reported
				},
			},
			FeatureGateFilter: map[string]config.FeatureGateFilter{
				constants.FeatureGateNewSKU: {
					FullSwitchTime: billingSwitchTime + 2000, //should be ignored
					Tenants: []config.TenantFilter{
						{
							TenantId:   "2222",
							SwitchTime: billingSwitchTime - 6000 - 120, //should be reported
						},
						{
							TenantId:   "22222",
							SwitchTime: billingSwitchTime - 2000, //should be ingored
						},
					},
				},
			},
		},
	})

	err := os.MkdirAll(testDataPath, 0755)
	if err != nil {
		panic(err)
	}

	code := m.Run()

	config.Init(originalConfig)
	os.RemoveAll(testDataRoot)

	os.Exit(code)
}
