package resourcepool

import (
	"testing"

	"github.com/stretchr/testify/assert"
	"github.com/stretchr/testify/require"
	clusterngv1beta "github.com/tidbcloud/cluster-service-ng/api/cluster-service-ng/v1beta"

	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
)

func TestBuildCreateSharedPoolRequestIncludesResourcePoolPlacement(t *testing.T) {
	req := &globalngv1.CreateResourcePoolRequest{
		ResourcePool: &globalngv1.ResourcePool{
			OwnerId:               42,
			VcpusLimit:            106,
			PlacementGroupEnabled: true,
			HighAvailabilityType:  globalngv1.ResourcePool_ZONAL,
		},
		Demand: &globalngv1.CreateResourcePoolRequest_Demand{
			TikvData:    &globalngv1.CreateResourcePoolRequest_Storage{StorageType: globalngv1.ResourcePoolProfile_GP3},
			TikvRaftlog: &globalngv1.CreateResourcePoolRequest_Storage{StorageType: globalngv1.ResourcePoolProfile_GP3},
			TiflashCn:   &globalngv1.CreateResourcePoolRequest_Storage{StorageType: globalngv1.ResourcePoolProfile_GP3},
			TiflashWn:   &globalngv1.CreateResourcePoolRequest_Storage{StorageType: globalngv1.ResourcePoolProfile_GP3},
		},
	}

	sharedPoolReq, err := buildCreateSharedPoolRequest(req, 100, "cloud-identity", nil)
	require.NoError(t, err)
	assert.EqualValues(t, 106, sharedPoolReq.GetVcpusLimit())
	assert.True(t, sharedPoolReq.GetSharedPool().GetPlacementGroupEnabled())
	assert.NotNil(t, sharedPoolReq.GetRequestUnit())
	assert.Equal(
		t,
		clusterngv1beta.CreateSharedPoolRequest_InitSharedPoolConfig_ZONAL,
		sharedPoolReq.GetInitSharedPoolConfig().GetHighAvailabilityType(),
	)
	assert.Empty(t, sharedPoolReq.GetInitSharedPoolConfig().GetNodeZones())
}
