package cluster

import (
	"testing"

	"github.com/stretchr/testify/require"
	"google.golang.org/protobuf/encoding/protojson"

	globalcommonv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/common/v1"
	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	"github.com/tidbcloud/tidb-management-service/tidb-mgmt-service/domain/entity"
)

func TestBuildCreateRequestPreservesResourcePoolAndMaxRcu(t *testing.T) {
	cluster := &entity.Cluster{
		ClusterId:      100,
		OrganizationId: 200,
		ProjectId:      300,
		DeployType:     entity.DeployTypeNextGen,
		ResourcePoolID: 42,
		GlobalCluster: &globalngv1.Cluster{
			ServicePlan: globalcommonv1.ServicePlan_BYOC,
			MaxRcu:      20_000,
		},
	}

	request, err := buildCreateRequest(cluster)

	require.NoError(t, err)
	require.NotNil(t, request.ResourcePoolId)
	require.Equal(t, uint64(42), request.GetResourcePoolId())
	require.Equal(t, int64(20_000), request.GetCluster().GetMaxRcu())

	serialized, err := protojson.Marshal(request)
	require.NoError(t, err)
	var retried globalngv1.CreateClusterRequest
	require.NoError(t, protojson.Unmarshal(serialized, &retried))
	require.NotNil(t, retried.ResourcePoolId)
	require.Equal(t, uint64(42), retried.GetResourcePoolId())
	require.Equal(t, int64(20_000), retried.GetCluster().GetMaxRcu())
}
