package handlers

import (
	clinic_internal_api "github.com/pingcap-inc/clinic/clinic_data_service/pkg/clinic-internal-api"
	"github.com/pingcap-inc/clinic/clinic_data_service/pkg/service"
)

type healthCheckClusterInfoNeeds struct {
	SlowQueryURL bool
	MetricsURL   bool
}

func shouldFetchHealthCheckClusterInfo(req *service.HealthCheckCommonParameters, needs healthCheckClusterInfoNeeds) bool {
	if req == nil || req.ClusterId == "" {
		return false
	}
	if needs.SlowQueryURL && req.ClusterUrls.SlowQueryS3URL == "" {
		return true
	}
	if needs.MetricsURL && req.ClusterUrls.ClusterMetricsURL == "" {
		return true
	}
	return req.Region == "" ||
		req.Provider == "" ||
		req.DeployType == "" ||
		req.TenantId == "" ||
		req.ClinicOrgId == "" ||
		req.ProjectId == "" ||
		req.PhysicalClusterId == ""
}

func fillHealthCheckClusterInfo(req *service.HealthCheckCommonParameters, clusterInfo *clinic_internal_api.ClusterDataURLs) {
	if req == nil || clusterInfo == nil {
		return
	}
	if req.ClusterUrls.SlowQueryS3URL == "" {
		req.ClusterUrls.SlowQueryS3URL = clusterInfo.SlowQueryS3URL
	}
	if req.ClusterUrls.ClusterMetricsURL == "" {
		req.ClusterUrls.ClusterMetricsURL = clusterInfo.ClusterMetricsURL
	}
	if req.ClusterUrls.DataPlaneMetricsURL == "" {
		req.ClusterUrls.DataPlaneMetricsURL = clusterInfo.DataPlaneMetricsURL
	}
	if req.Region == "" {
		req.Region = clusterInfo.Region
	}
	if req.Provider == "" {
		req.Provider = clusterInfo.Provider
	}
	if req.DeployType == "" {
		req.DeployType = clusterInfo.DeployType
		if req.DeployType == "" {
			req.DeployType = clusterInfo.DeployTypeV2
		}
	}
	if req.TenantId == "" {
		req.TenantId = clusterInfo.OrgID
	}
	if req.ClinicOrgId == "" {
		req.ClinicOrgId = clusterInfo.ClinicTenantID
	}
	if req.ProjectId == "" {
		req.ProjectId = clusterInfo.ProjectID
	}
	if req.PhysicalClusterId == "" {
		req.PhysicalClusterId = clusterInfo.ParentID
	}
}
