package resourcepool

import (
	"encoding/json"
	"testing"

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

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

func TestBuildCreateSharedPoolRequestForwardsCapacityPlanner(t *testing.T) {
	for _, tt := range []struct {
		name    string
		enabled bool
	}{
		{name: "disabled"},
		{name: "enabled", enabled: true},
	} {
		t.Run(tt.name, func(t *testing.T) {
			req := &globalngv1.CreateResourcePoolRequest{}
			input := `{"enableCapacityPlanner":false}`
			if tt.enabled {
				input = `{"enableCapacityPlanner":true}`
			}
			require.NoError(t, protojson.Unmarshal([]byte(input), req))
			fixture := createResourcePoolRequestWithPdDeploymentMode(globalngv1.PdDeploymentMode_PD_DEPLOYMENT_MODE_UNSPECIFIED)
			req.ResourcePool = fixture.ResourcePool
			req.Demand = fixture.Demand

			regional, buildErr := buildCreateSharedPoolRequest(req, 100, "cloud-identity", nil)
			require.NoError(t, buildErr)

			// The regional adapter uses JSON, so the current field name must survive forwarding.
			body, err := (protojson.MarshalOptions{EmitUnpopulated: true}).Marshal(regional)
			require.NoError(t, err)
			var fields map[string]any
			require.NoError(t, json.Unmarshal(body, &fields))
			require.Equal(t, tt.enabled, fields["enableCapacityPlanner"])
			require.NotContains(t, fields, "enableAutoscalingOperator")
		})
	}
}
