package gkeheterogeneous

import (
	"context"

	regionaldedicatedv1 "github.com/tidbcloud/infra-provider/api/tidbcloud/regional-server/v1"

	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/adapter/regionserver"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/entity"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

func GetDeploy(
	ctx context.Context,
	regionServerCli regionserver.Client,
	regionEn *entity.Region,
	clusterID string,
	componentType regionaldedicatedv1.ComponentType,
	tidbGroupID string,
) (*regionaldedicatedv1.GKEHeterogeneousDeploy, bool, bizerr.BizError) {
	deploy, berr := regionServerCli.GetGKEHeterogeneousDeploy(ctx, regionEn, &regionaldedicatedv1.GetGKEHeterogeneousDeployRequest{
		ClusterId:     clusterID,
		ComponentType: componentType,
		TidbGroupId:   tidbGroupID,
	})
	if berr != nil {
		if berr.ErrCode() == bizerr.ErrCodeRecordNotFound {
			return &regionaldedicatedv1.GKEHeterogeneousDeploy{
				Enabled:       false,
				ComponentType: componentType,
				TidbGroupId:   tidbGroupID,
			}, false, nil
		}
		return nil, false, berr
	}
	if deploy == nil {
		return nil, false, bizerr.New(bizerr.ErrCodeRegionalAPI, "empty gke heterogeneous deploy response from regional-server")
	}
	if !deploy.GetEnabled() {
		return deploy, false, nil
	}
	return deploy, true, nil
}
