package handlers

import (
	"testing"

	clinic_internal_api "github.com/pingcap-inc/clinic/clinic_data_service/pkg/clinic-internal-api"
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/dto"
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/service"
	"github.com/stretchr/testify/assert"
)

func TestFillHealthCheckClusterInfoAzure(t *testing.T) {
	req := &service.HealthCheckCommonParameters{
		ClusterId: "logical-cluster",
		Region:    "explicit-region",
		ClusterUrls: dto.ClusterUrls{
			ClusterMetricsURL: "https://explicit.metrics/api/v1/",
		},
	}
	clusterInfo := &clinic_internal_api.ClusterDataURLs{
		OrgID:               "60205",
		ProjectID:           "3201779",
		Region:              "southeastasia",
		DeployTypeV2:        "premium",
		Provider:            "azure",
		SlowQueryS3URL:      "https://acct.dfs.core.windows.net/container/deltalake/cluster/slowlogs/",
		ClusterMetricsURL:   "https://cluster.metrics/api/v1/",
		DataPlaneMetricsURL: "https://dataplane.metrics/api/v1/",
		ParentID:            "physical-cluster",
		ClinicTenantID:      "clinic-tenant",
	}

	fillHealthCheckClusterInfo(req, clusterInfo)

	assert.Equal(t, "https://acct.dfs.core.windows.net/container/deltalake/cluster/slowlogs/", req.ClusterUrls.SlowQueryS3URL)
	assert.Equal(t, "https://explicit.metrics/api/v1/", req.ClusterUrls.ClusterMetricsURL)
	assert.Equal(t, "https://dataplane.metrics/api/v1/", req.ClusterUrls.DataPlaneMetricsURL)
	assert.Equal(t, "explicit-region", req.Region)
	assert.Equal(t, "azure", req.Provider)
	assert.Equal(t, "premium", req.DeployType)
	assert.Equal(t, "60205", req.TenantId)
	assert.Equal(t, "clinic-tenant", req.ClinicOrgId)
	assert.Equal(t, "3201779", req.ProjectId)
	assert.Equal(t, "physical-cluster", req.PhysicalClusterId)
}

func TestShouldFetchHealthCheckClusterInfo(t *testing.T) {
	assert.True(t, shouldFetchHealthCheckClusterInfo(&service.HealthCheckCommonParameters{
		ClusterId: "cluster",
	}, healthCheckClusterInfoNeeds{SlowQueryURL: true}))

	assert.True(t, shouldFetchHealthCheckClusterInfo(&service.HealthCheckCommonParameters{
		ClusterId: "cluster",
		Region:    "southeastasia",
		Provider:  "azure",
		ClusterUrls: dto.ClusterUrls{
			ClusterMetricsURL: "https://cluster.metrics/api/v1/",
		},
	}, healthCheckClusterInfoNeeds{MetricsURL: true}))

	assert.False(t, shouldFetchHealthCheckClusterInfo(&service.HealthCheckCommonParameters{
		ClusterId:         "cluster",
		PhysicalClusterId: "physical-cluster",
		DeployType:        "premium",
		ProjectId:         "project",
		Provider:          "azure",
		Region:            "southeastasia",
		TenantId:          "tenant",
		ClinicOrgId:       "clinic-tenant",
		ClusterUrls: dto.ClusterUrls{
			ClusterMetricsURL:   "https://cluster.metrics/api/v1/",
			DataPlaneMetricsURL: "https://dataplane.metrics/api/v1/",
			SlowQueryS3URL:      "https://acct.dfs.core.windows.net/container/deltalake/cluster/slowlogs/",
		},
	}, healthCheckClusterInfoNeeds{SlowQueryURL: true, MetricsURL: true}))
}
