package grpcli

import (
	"context"

	"github.com/tidbcloud/pkgv2/bizerr"
	serverlessv1 "github.com/tidbcloud/tidb-management-service/api/spec/regional/serverless/v1"
	mgmt "github.com/tidbcloud/tidb-management-service/api/spec/tidb_mgmt_service/v1"
)

func GetServerlessRegional(ctx context.Context, clusterId uint64) (*serverlessv1.ServerlessRegionalServiceClusterInfo, bizerr.BizError) {
	client := getMgmtSvcClient()
	req := &mgmt.ListClustersRequest{
		Filter: &mgmt.ClusterFilter{
			ClusterIds:    []uint64{clusterId},
			ExcludeStates: MgntDeletedClusterStatus,
			ClusterType:   mgmt.DeployType_DEPLOY_TYPE_SERVERLESS.Enum(),
		},
	}
	listResp, err := client.ListClusters(ctx, req)
	if err != nil {
		return nil, bizerr.WrapError(err, "GetServerlessClusterFullView failed")
	}
	if len(listResp.Clusters) == 0 {
		return nil, bizerr.New(bizerr.ErrCodeRecordNotFound, "cluster %d is not found", clusterId)
	}
	if listResp.Clusters[0].GetServerlessCluster().GetCluster() == nil {
		return nil, bizerr.New(bizerr.ErrCodeUnknown, "cluster %d regional info is empty", clusterId)

	}
	return listResp.Clusters[0].GetServerlessCluster().GetCluster(), nil
}

func UpdateServerlessRegionalAnnotations(ctx context.Context, clusterId uint64, annotations map[string]string) bizerr.BizError {
	client := getMgmtSvcClient()
	_, err := client.UpdateServerlessRegionalClusterAnnotations(ctx, &mgmt.UpdateServerlessRegionalClusterAnnotationsRequest{
		ClusterId:   clusterId,
		Annotations: annotations,
	})
	if err != nil {
		return bizerr.WrapError(err, "UpdateServerlessRegionalAnnotations failed")
	}
	return nil
}
