package e2e

import (
	"time"

	"github.com/stretchr/testify/suite"
	dpmgrclient "github.com/tidbcloud/infra-provider/regional-server/test/api/dataplane-manager/client"
	"github.com/tidbcloud/infra-provider/regional-server/test/api/dataplane-manager/client/data_plane_service"
	"github.com/tidbcloud/infra-provider/regional-server/test/api/dataplane-manager/models"
)

type nodePoolConfigTestSuite struct {
	suite.Suite
	dataPlaneClient *dpmgrclient.DataplaneManager
}

func newNodePoolConfigTestSuite(dataPlaneClient *dpmgrclient.DataplaneManager) *nodePoolConfigTestSuite {
	return &nodePoolConfigTestSuite{
		dataPlaneClient: dataPlaneClient,
	}
}

func (s *nodePoolConfigTestSuite) TestListNodePoolConfigs() {
	listParams := &data_plane_service.DataPlaneServiceListNodePoolConfigsParams{}

	var nodePoolConfigs []*models.V1NodePoolConfig
	err := retryDo(s.T(), "listNodePoolConfigs", func() error {
		resp, err := s.dataPlaneClient.DataPlaneService.DataPlaneServiceListNodePoolConfigs(listParams)
		if err != nil {
			return err
		}
		nodePoolConfigs = resp.Payload.NodePoolConfigs
		return nil
	}, 3, time.Second*10)
	if !s.NoError(err) {
		return
	}

	s.Greater(len(nodePoolConfigs), 0)
	s.True(s.nodeTypeExists(nodePoolConfigs, models.V1NodeTypeDedicated))
}

func (s *nodePoolConfigTestSuite) nodeTypeExists(
	nodePoolConfigs []*models.V1NodePoolConfig, nodeType models.V1NodeType,
) bool {
	for _, nodePoolConfig := range nodePoolConfigs {
		if nodePoolConfig.NodeType == nodeType {
			return true
		}
	}
	return false
}
