package opsservice

import (
	"os"
	"testing"
	"time"

	"github.com/tidbcloud/observability/pkg/common/configs"
	"github.com/tidbcloud/observability/pkg/common/constants"
	"github.com/tidbcloud/observability/pkg/common/structs"
)

var defaultVendor = string(constants.AWS)
var defaultRegion = "us-east-2"

func TestMain(m *testing.M) {
	configs.Init(structs.ServiceInfo{
		ServerName: constants.ObservabilityRegionalServer,
		Port:       8080,
		Vendor:     defaultVendor,
		Region:     defaultRegion,
		Host:       "127.0.0.1",
		Env:        constants.EnvDev,
		MonitorSpec: map[string]structs.MonitorSpec{
			"default": {
				Cpu:            "1",
				Memory:         "200Mi",
				InitialStorage: "40Gi",
				OverSell:       0.5,
				IsDefault:      true,
			},
			"spec1": {
				Cpu:            "2",
				Memory:         "400Mi",
				InitialStorage: "80Gi",
				OverSell:       0.25,
			},
		},
		AZConfig: map[string]structs.AvailabilityZoneConfig{
			"zone1": {
				EndpointServiceID: "e1",
				IngressClassName:  "i1",
				DefaultDataAZ:     true,
			},
			"zone2": {
				EndpointServiceID: "e2",
				IngressClassName:  "i2",
			},
		},
		AccountInfo: structs.AccountInfoConfig{
			Oidc:    "oidc.eks.us-west-2.amazonaws.com/id/005D92AA81DE2DCE14A2991BAC54FEF8",
			OidcARN: "arn:aws:iam::552185537300:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/005D92AA81DE2DCE14A2991BAC54FEF8",
			Account: "aaaa",
			Region:  "us-west-2",
		},
		AlertManagerInfo: structs.AlertManagerConfig{
			Name:      "alertmanager-operated",
			NameSpace: "observability",
			Port:      "web",
		},
		VMClusterInfo: []structs.VictoriaMetricsCluster{
			{VMClusterName: "vmTest"},
		},
		BizTypeConfigs: map[string]structs.BizTypeConfig{
			"b": {
				BizType:                    "prod-test",
				ExternalApiAuthUrlTemplate: "https://test/api/v1/users/me",
				AgentManagerARN:            "aaa",
				MonitorPromRuleTemplate:    "rule-template",
				MonitorReplicas:            2,
				MonitorVersion:             "v2.33.5",
				MonitorRetention:           "7d",
			},
			"tidbcloud": {
				BizType:                    "prod-test",
				ExternalApiAuthUrlTemplate: "https://test/api/v1/users/me",
				AgentManagerARN:            "role2",
				MonitorPromRuleTemplate:    "rule-template",
				MonitorReplicas:            2,
				MonitorVersion:             "v2.33.5",
				MonitorRetention:           "15d",
			},
		},
		AlertRuleCacheConfig: structs.OverlayAlertRuleCacheConfig{
			ExpireTime:              3 * time.Second,
			MaxItems:                10,
			MaxAlertRulesPerCluster: 3,
			Enabled:                 true,
			SleepTime:               1 * time.Second,
			MaxDeletionPerCycle:     5,
		},
	})
	code := m.Run()
	os.Exit(code)
}
