package server

import (
	"context"

	dplanemgrv1 "github.com/tidbcloud/cluster-service-ng/api/dataplane-manager/v1"
	"github.com/tidbcloud/cluster-service-ng/domain/entity"
	"google.golang.org/grpc/codes"
)

func (s *serverImpl) GetSharedPoolProvisionConfiguration(ctx context.Context) (*entity.SharedPoolProvisionConfiguration, error) {
	if !s.o11yClusterCIDRConfigured {
		return nil, resourcePoolStatusError(codes.FailedPrecondition, reasonO11yCIDRConfigurationMissing, "o11y cluster cidr is not configured")
	}
	configuration, err := s.dataplaneClient.ListNodePoolConfigs(ctx, &dplanemgrv1.ListNodePoolConfigsRequest{})
	if err != nil {
		return nil, resourcePoolStatusError(codes.Unavailable, reasonProvisionConfigurationUnavailable, "shared pool provision configuration is unavailable")
	}
	if configuration == nil {
		return nil, resourcePoolStatusError(codes.Internal, reasonProvisionConfigurationUnavailable, "dataplane manager returned an empty provision configuration")
	}
	return &entity.SharedPoolProvisionConfiguration{
		O11YClusterCidr:    s.o11yClusterPrefix.String(),
		AvailableNodeZones: append([]string(nil), configuration.GetAvailableNodeZones()...),
	}, nil
}
