package action

import (
	"context"

	globaldedicatedv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/dedicated/v1"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/entity"
	clusterrepo "github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/repository/cluster"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/repository/region"
	"github.com/tidbcloud/tidb-management-service/dedicated-global-service/domain/service/gkeheterogeneous"
	"github.com/tidbcloud/tidb-management-service/utilities/bizerr"
)

func skipIfClusterDeleted(
	ctx context.Context,
	clusterRepo clusterrepo.Repo,
	clusterID uint64,
) (bool, error) {
	cluster, err := clusterRepo.Get(ctx, clusterID, true)
	if err != nil {
		if err.ErrCode() == bizerr.ErrCodeRecordNotFound {
			return true, nil
		}
		return false, err
	}
	return cluster.State == globaldedicatedv1.Cluster_DELETED, nil
}

func prepareGKEHeterogeneousApplyTarget(
	ctx context.Context,
	clusterRepo clusterrepo.Repo,
	regionRepo region.Repo,
	req *globaldedicatedv1.ApplyGKEHeterogeneousDeployRequest,
) (*entity.Region, bizerr.BizError) {
	_, regionEn, err := gkeheterogeneous.Prepare(
		ctx,
		clusterRepo,
		regionRepo,
		nil,
		req.GetTenantId(),
		req.GetProjectId(),
		req.GetClusterId(),
		req.GetComponentType(),
		true,
		false,
	)
	if err != nil {
		return nil, err
	}
	return regionEn, nil
}
