package clustergateway

import (
	"context"
	"encoding/json"
	"fmt"
	"net/http"

	"github.com/go-resty/resty/v2"
	"github.com/pingcap/kvproto/pkg/metapb"
	"github.com/tidbcloud/cluster-service-ng/domain/entity"
)

func (c *clusterGatewayImpl) GetCluster(ctx context.Context, sharedPool *entity.SharedPool) (*metapb.Cluster, error) {
	resp, err := c.callClusterProxy(ctx, sharedPool, http.MethodGet, operationMap["GetCluster"], func(request *resty.Request) *resty.Request {
		request.SetPathParam(sharedPoolIdParameter, sharedPool.GetId())
		return request
	})
	if err != nil {
		return nil, fmt.Errorf("GetCluster failed: %w", err)
	}

	var out metapb.Cluster
	if err := json.Unmarshal(resp.Body(), &out); err != nil {
		return nil, fmt.Errorf("unmarshal GetCluster response failed: %w", err)
	}

	return &out, nil
}
