/*
TiDB Cloud Console API

TiDB Cloud Console API.

API version: v1beta1
*/

// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.

package client

import (
	"bytes"
	"context"
	"io"
	"net/http"
	"net/url"
	"strings"
)


// ClusterServiceAPIService ClusterServiceAPI service
type ClusterServiceAPIService service

type ApiClusterServiceAdvancedModifyDedicatedClusterRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	clusterId string
	orgId *string
	projectId *string
	cluster *ClusterServiceAdvancedModifyDedicatedClusterRequest
}

// Organization id
func (r ApiClusterServiceAdvancedModifyDedicatedClusterRequest) OrgId(orgId string) ApiClusterServiceAdvancedModifyDedicatedClusterRequest {
	r.orgId = &orgId
	return r
}

// Project id
func (r ApiClusterServiceAdvancedModifyDedicatedClusterRequest) ProjectId(projectId string) ApiClusterServiceAdvancedModifyDedicatedClusterRequest {
	r.projectId = &projectId
	return r
}

func (r ApiClusterServiceAdvancedModifyDedicatedClusterRequest) Cluster(cluster ClusterServiceAdvancedModifyDedicatedClusterRequest) ApiClusterServiceAdvancedModifyDedicatedClusterRequest {
	r.cluster = &cluster
	return r
}

func (r ApiClusterServiceAdvancedModifyDedicatedClusterRequest) Execute() (*BffclusterManagementv1beta1Cluster, *http.Response, error) {
	return r.ApiService.ClusterServiceAdvancedModifyDedicatedClusterExecute(r)
}

/*
ClusterServiceAdvancedModifyDedicatedCluster Method for ClusterServiceAdvancedModifyDedicatedCluster

 @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
 @param clusterId
 @return ApiClusterServiceAdvancedModifyDedicatedClusterRequest
*/
func (a *ClusterServiceAPIService) ClusterServiceAdvancedModifyDedicatedCluster(ctx context.Context, clusterId string) ApiClusterServiceAdvancedModifyDedicatedClusterRequest {
	return ApiClusterServiceAdvancedModifyDedicatedClusterRequest{
		ApiService: a,
		ctx: ctx,
		clusterId: clusterId,
	}
}

// Execute executes the request
//  @return BffclusterManagementv1beta1Cluster
func (a *ClusterServiceAPIService) ClusterServiceAdvancedModifyDedicatedClusterExecute(r ApiClusterServiceAdvancedModifyDedicatedClusterRequest) (*BffclusterManagementv1beta1Cluster, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodPost
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *BffclusterManagementv1beta1Cluster
	)

	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ClusterServiceAPIService.ClusterServiceAdvancedModifyDedicatedCluster")
	if err != nil {
		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
	}

	localVarPath := localBasePath + "/api/v2023/clusterManagement/v1beta1/clusters/{clusterId}:dedicatedAdvancedModify"
	localVarPath = strings.Replace(localVarPath, "{"+"clusterId"+"}", url.PathEscape(parameterValueToString(r.clusterId, "clusterId")), -1)

	localVarHeaderParams := make(map[string]string)
	localVarQueryParams := url.Values{}
	localVarFormParams := url.Values{}
	if r.orgId == nil {
		return localVarReturnValue, nil, reportError("orgId is required and must be specified")
	}
	if r.projectId == nil {
		return localVarReturnValue, nil, reportError("projectId is required and must be specified")
	}
	if r.cluster == nil {
		return localVarReturnValue, nil, reportError("cluster is required and must be specified")
	}

	parameterAddToHeaderOrQuery(localVarQueryParams, "orgId", r.orgId, "", "")
	parameterAddToHeaderOrQuery(localVarQueryParams, "projectId", r.projectId, "", "")
	// to determine the Content-Type header
	localVarHTTPContentTypes := []string{"application/json"}

	// set Content-Type header
	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
	if localVarHTTPContentType != "" {
		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
	}

	// to determine the Accept header
	localVarHTTPHeaderAccepts := []string{"application/json"}

	// set Accept header
	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
	if localVarHTTPHeaderAccept != "" {
		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
	}
	// body params
	localVarPostBody = r.cluster
	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
	if err != nil {
		return localVarReturnValue, nil, err
	}

	localVarHTTPResponse, err := a.client.callAPI(req)
	if err != nil || localVarHTTPResponse == nil {
		return localVarReturnValue, localVarHTTPResponse, err
	}

	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
	localVarHTTPResponse.Body.Close()
	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
	if err != nil {
		return localVarReturnValue, localVarHTTPResponse, err
	}

	if localVarHTTPResponse.StatusCode >= 300 {
		newErr := &GenericOpenAPIError{
			body:  localVarBody,
			error: localVarHTTPResponse.Status,
		}
			var v GooglerpcStatus
			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
			if err != nil {
				newErr.error = err.Error()
				return localVarReturnValue, localVarHTTPResponse, newErr
			}
					newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
					newErr.model = v
		return localVarReturnValue, localVarHTTPResponse, newErr
	}

	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
	if err != nil {
		newErr := &GenericOpenAPIError{
			body:  localVarBody,
			error: err.Error(),
		}
		return localVarReturnValue, localVarHTTPResponse, newErr
	}

	return localVarReturnValue, localVarHTTPResponse, nil
}

type ApiClusterServiceCheckModificationRisksRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	clusterId string
	orgId *string
	projectId *string
	body *ClusterServiceCheckModificationRisksBody
}

// Organization id
func (r ApiClusterServiceCheckModificationRisksRequest) OrgId(orgId string) ApiClusterServiceCheckModificationRisksRequest {
	r.orgId = &orgId
	return r
}

// Project id
func (r ApiClusterServiceCheckModificationRisksRequest) ProjectId(projectId string) ApiClusterServiceCheckModificationRisksRequest {
	r.projectId = &projectId
	return r
}

func (r ApiClusterServiceCheckModificationRisksRequest) Body(body ClusterServiceCheckModificationRisksBody) ApiClusterServiceCheckModificationRisksRequest {
	r.body = &body
	return r
}

func (r ApiClusterServiceCheckModificationRisksRequest) Execute() (*V1beta1CheckModificationRisksResponse, *http.Response, error) {
	return r.ApiService.ClusterServiceCheckModificationRisksExecute(r)
}

/*
ClusterServiceCheckModificationRisks Check if the modification will affect the stability of the cluster

 @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
 @param clusterId
 @return ApiClusterServiceCheckModificationRisksRequest
*/
func (a *ClusterServiceAPIService) ClusterServiceCheckModificationRisks(ctx context.Context, clusterId string) ApiClusterServiceCheckModificationRisksRequest {
	return ApiClusterServiceCheckModificationRisksRequest{
		ApiService: a,
		ctx: ctx,
		clusterId: clusterId,
	}
}

// Execute executes the request
//  @return V1beta1CheckModificationRisksResponse
func (a *ClusterServiceAPIService) ClusterServiceCheckModificationRisksExecute(r ApiClusterServiceCheckModificationRisksRequest) (*V1beta1CheckModificationRisksResponse, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodPost
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *V1beta1CheckModificationRisksResponse
	)

	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ClusterServiceAPIService.ClusterServiceCheckModificationRisks")
	if err != nil {
		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
	}

	localVarPath := localBasePath + "/api/v2023/clusterManagement/v1beta1/clusters/{clusterId}:checkModificationRisks"
	localVarPath = strings.Replace(localVarPath, "{"+"clusterId"+"}", url.PathEscape(parameterValueToString(r.clusterId, "clusterId")), -1)

	localVarHeaderParams := make(map[string]string)
	localVarQueryParams := url.Values{}
	localVarFormParams := url.Values{}
	if r.orgId == nil {
		return localVarReturnValue, nil, reportError("orgId is required and must be specified")
	}
	if r.projectId == nil {
		return localVarReturnValue, nil, reportError("projectId is required and must be specified")
	}
	if r.body == nil {
		return localVarReturnValue, nil, reportError("body is required and must be specified")
	}

	parameterAddToHeaderOrQuery(localVarQueryParams, "orgId", r.orgId, "", "")
	parameterAddToHeaderOrQuery(localVarQueryParams, "projectId", r.projectId, "", "")
	// to determine the Content-Type header
	localVarHTTPContentTypes := []string{"application/json"}

	// set Content-Type header
	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
	if localVarHTTPContentType != "" {
		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
	}

	// to determine the Accept header
	localVarHTTPHeaderAccepts := []string{"application/json"}

	// set Accept header
	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
	if localVarHTTPHeaderAccept != "" {
		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
	}
	// body params
	localVarPostBody = r.body
	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
	if err != nil {
		return localVarReturnValue, nil, err
	}

	localVarHTTPResponse, err := a.client.callAPI(req)
	if err != nil || localVarHTTPResponse == nil {
		return localVarReturnValue, localVarHTTPResponse, err
	}

	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
	localVarHTTPResponse.Body.Close()
	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
	if err != nil {
		return localVarReturnValue, localVarHTTPResponse, err
	}

	if localVarHTTPResponse.StatusCode >= 300 {
		newErr := &GenericOpenAPIError{
			body:  localVarBody,
			error: localVarHTTPResponse.Status,
		}
			var v GooglerpcStatus
			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
			if err != nil {
				newErr.error = err.Error()
				return localVarReturnValue, localVarHTTPResponse, newErr
			}
					newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
					newErr.model = v
		return localVarReturnValue, localVarHTTPResponse, newErr
	}

	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
	if err != nil {
		newErr := &GenericOpenAPIError{
			body:  localVarBody,
			error: err.Error(),
		}
		return localVarReturnValue, localVarHTTPResponse, newErr
	}

	return localVarReturnValue, localVarHTTPResponse, nil
}

type ApiClusterServiceEstimatePriceRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	orgId *string
	projectId *string
	body *ClusterManagementv1beta1EstimatePriceRequest
}

// Organization id
func (r ApiClusterServiceEstimatePriceRequest) OrgId(orgId string) ApiClusterServiceEstimatePriceRequest {
	r.orgId = &orgId
	return r
}

// Project id
func (r ApiClusterServiceEstimatePriceRequest) ProjectId(projectId string) ApiClusterServiceEstimatePriceRequest {
	r.projectId = &projectId
	return r
}

func (r ApiClusterServiceEstimatePriceRequest) Body(body ClusterManagementv1beta1EstimatePriceRequest) ApiClusterServiceEstimatePriceRequest {
	r.body = &body
	return r
}

func (r ApiClusterServiceEstimatePriceRequest) Execute() (*ClusterManagementv1beta1EstimatePriceResponse, *http.Response, error) {
	return r.ApiService.ClusterServiceEstimatePriceExecute(r)
}

/*
ClusterServiceEstimatePrice Estimate the price for the wanted cluster

 @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
 @return ApiClusterServiceEstimatePriceRequest
*/
func (a *ClusterServiceAPIService) ClusterServiceEstimatePrice(ctx context.Context) ApiClusterServiceEstimatePriceRequest {
	return ApiClusterServiceEstimatePriceRequest{
		ApiService: a,
		ctx: ctx,
	}
}

// Execute executes the request
//  @return ClusterManagementv1beta1EstimatePriceResponse
func (a *ClusterServiceAPIService) ClusterServiceEstimatePriceExecute(r ApiClusterServiceEstimatePriceRequest) (*ClusterManagementv1beta1EstimatePriceResponse, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodPost
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *ClusterManagementv1beta1EstimatePriceResponse
	)

	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ClusterServiceAPIService.ClusterServiceEstimatePrice")
	if err != nil {
		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
	}

	localVarPath := localBasePath + "/api/v2023/clusterManagement/v1beta1/clusters:estimatePrice"

	localVarHeaderParams := make(map[string]string)
	localVarQueryParams := url.Values{}
	localVarFormParams := url.Values{}
	if r.orgId == nil {
		return localVarReturnValue, nil, reportError("orgId is required and must be specified")
	}
	if r.projectId == nil {
		return localVarReturnValue, nil, reportError("projectId is required and must be specified")
	}
	if r.body == nil {
		return localVarReturnValue, nil, reportError("body is required and must be specified")
	}

	parameterAddToHeaderOrQuery(localVarQueryParams, "orgId", r.orgId, "", "")
	parameterAddToHeaderOrQuery(localVarQueryParams, "projectId", r.projectId, "", "")
	// to determine the Content-Type header
	localVarHTTPContentTypes := []string{"application/json"}

	// set Content-Type header
	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
	if localVarHTTPContentType != "" {
		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
	}

	// to determine the Accept header
	localVarHTTPHeaderAccepts := []string{"application/json"}

	// set Accept header
	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
	if localVarHTTPHeaderAccept != "" {
		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
	}
	// body params
	localVarPostBody = r.body
	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
	if err != nil {
		return localVarReturnValue, nil, err
	}

	localVarHTTPResponse, err := a.client.callAPI(req)
	if err != nil || localVarHTTPResponse == nil {
		return localVarReturnValue, localVarHTTPResponse, err
	}

	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
	localVarHTTPResponse.Body.Close()
	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
	if err != nil {
		return localVarReturnValue, localVarHTTPResponse, err
	}

	if localVarHTTPResponse.StatusCode >= 300 {
		newErr := &GenericOpenAPIError{
			body:  localVarBody,
			error: localVarHTTPResponse.Status,
		}
			var v GooglerpcStatus
			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
			if err != nil {
				newErr.error = err.Error()
				return localVarReturnValue, localVarHTTPResponse, newErr
			}
					newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
					newErr.model = v
		return localVarReturnValue, localVarHTTPResponse, newErr
	}

	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
	if err != nil {
		newErr := &GenericOpenAPIError{
			body:  localVarBody,
			error: err.Error(),
		}
		return localVarReturnValue, localVarHTTPResponse, newErr
	}

	return localVarReturnValue, localVarHTTPResponse, nil
}

type ApiClusterServiceGetClusterRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	clusterId string
	orgId *string
	projectId *string
}

// Organization id
func (r ApiClusterServiceGetClusterRequest) OrgId(orgId string) ApiClusterServiceGetClusterRequest {
	r.orgId = &orgId
	return r
}

// Project id
func (r ApiClusterServiceGetClusterRequest) ProjectId(projectId string) ApiClusterServiceGetClusterRequest {
	r.projectId = &projectId
	return r
}

func (r ApiClusterServiceGetClusterRequest) Execute() (*BffclusterManagementv1beta1Cluster, *http.Response, error) {
	return r.ApiService.ClusterServiceGetClusterExecute(r)
}

/*
ClusterServiceGetCluster Method for ClusterServiceGetCluster

 @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
 @param clusterId
 @return ApiClusterServiceGetClusterRequest
*/
func (a *ClusterServiceAPIService) ClusterServiceGetCluster(ctx context.Context, clusterId string) ApiClusterServiceGetClusterRequest {
	return ApiClusterServiceGetClusterRequest{
		ApiService: a,
		ctx: ctx,
		clusterId: clusterId,
	}
}

// Execute executes the request
//  @return BffclusterManagementv1beta1Cluster
func (a *ClusterServiceAPIService) ClusterServiceGetClusterExecute(r ApiClusterServiceGetClusterRequest) (*BffclusterManagementv1beta1Cluster, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodGet
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *BffclusterManagementv1beta1Cluster
	)

	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ClusterServiceAPIService.ClusterServiceGetCluster")
	if err != nil {
		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
	}

	localVarPath := localBasePath + "/api/v2023/clusterManagement/v1beta1/clusters/{clusterId}"
	localVarPath = strings.Replace(localVarPath, "{"+"clusterId"+"}", url.PathEscape(parameterValueToString(r.clusterId, "clusterId")), -1)

	localVarHeaderParams := make(map[string]string)
	localVarQueryParams := url.Values{}
	localVarFormParams := url.Values{}
	if r.orgId == nil {
		return localVarReturnValue, nil, reportError("orgId is required and must be specified")
	}
	if r.projectId == nil {
		return localVarReturnValue, nil, reportError("projectId is required and must be specified")
	}

	parameterAddToHeaderOrQuery(localVarQueryParams, "orgId", r.orgId, "", "")
	parameterAddToHeaderOrQuery(localVarQueryParams, "projectId", r.projectId, "", "")
	// to determine the Content-Type header
	localVarHTTPContentTypes := []string{}

	// set Content-Type header
	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
	if localVarHTTPContentType != "" {
		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
	}

	// to determine the Accept header
	localVarHTTPHeaderAccepts := []string{"application/json"}

	// set Accept header
	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
	if localVarHTTPHeaderAccept != "" {
		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
	}
	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
	if err != nil {
		return localVarReturnValue, nil, err
	}

	localVarHTTPResponse, err := a.client.callAPI(req)
	if err != nil || localVarHTTPResponse == nil {
		return localVarReturnValue, localVarHTTPResponse, err
	}

	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
	localVarHTTPResponse.Body.Close()
	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
	if err != nil {
		return localVarReturnValue, localVarHTTPResponse, err
	}

	if localVarHTTPResponse.StatusCode >= 300 {
		newErr := &GenericOpenAPIError{
			body:  localVarBody,
			error: localVarHTTPResponse.Status,
		}
			var v GooglerpcStatus
			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
			if err != nil {
				newErr.error = err.Error()
				return localVarReturnValue, localVarHTTPResponse, newErr
			}
					newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
					newErr.model = v
		return localVarReturnValue, localVarHTTPResponse, newErr
	}

	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
	if err != nil {
		newErr := &GenericOpenAPIError{
			body:  localVarBody,
			error: err.Error(),
		}
		return localVarReturnValue, localVarHTTPResponse, newErr
	}

	return localVarReturnValue, localVarHTTPResponse, nil
}

type ApiClusterServiceListClustersRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	orgId *string
	projectId *string
	clusterType *string
	onlyResourceInsufficient *bool
	name *string
	pageSize *int32
	pageToken *string
	skip *int32
}

// Organization id
func (r ApiClusterServiceListClustersRequest) OrgId(orgId string) ApiClusterServiceListClustersRequest {
	r.orgId = &orgId
	return r
}

// Project id
func (r ApiClusterServiceListClustersRequest) ProjectId(projectId string) ApiClusterServiceListClustersRequest {
	r.projectId = &projectId
	return r
}

// if unspecified, all clusters are returned.
func (r ApiClusterServiceListClustersRequest) ClusterType(clusterType string) ApiClusterServiceListClustersRequest {
	r.clusterType = &clusterType
	return r
}

// Only for dedicated clusters. If ture, only clusters annotated with \&quot;tidb.cloud/insufficient-resource\&quot; will be returned.
func (r ApiClusterServiceListClustersRequest) OnlyResourceInsufficient(onlyResourceInsufficient bool) ApiClusterServiceListClustersRequest {
	r.onlyResourceInsufficient = &onlyResourceInsufficient
	return r
}

// If specified, only clusters with the specified name will be returned.
func (r ApiClusterServiceListClustersRequest) Name(name string) ApiClusterServiceListClustersRequest {
	r.name = &name
	return r
}

// The maximum number of clusters to return. The service may return fewer than this value. If unspecified, at most X clusters will be returned. The maximum value is X; values above X will be coerced to X.
func (r ApiClusterServiceListClustersRequest) PageSize(pageSize int32) ApiClusterServiceListClustersRequest {
	r.pageSize = &pageSize
	return r
}

// A page token, received from a previous &#x60;ListClusters&#x60; call. Provide this to retrieve the subsequent page.  When paginating, all other parameters provided to &#x60;ListClusters&#x60; must match the call that provided the page token.
func (r ApiClusterServiceListClustersRequest) PageToken(pageToken string) ApiClusterServiceListClustersRequest {
	r.pageToken = &pageToken
	return r
}

// The number of individual resources to skip before starting to return results. If the skip value causes the cursor to move past the end of the collection, the response will be 200 OK with an empty result set and no next_page_token.
func (r ApiClusterServiceListClustersRequest) Skip(skip int32) ApiClusterServiceListClustersRequest {
	r.skip = &skip
	return r
}

func (r ApiClusterServiceListClustersRequest) Execute() (*BffclusterManagementv1beta1ListClustersResponse, *http.Response, error) {
	return r.ApiService.ClusterServiceListClustersExecute(r)
}

/*
ClusterServiceListClusters Method for ClusterServiceListClusters

 @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
 @return ApiClusterServiceListClustersRequest
*/
func (a *ClusterServiceAPIService) ClusterServiceListClusters(ctx context.Context) ApiClusterServiceListClustersRequest {
	return ApiClusterServiceListClustersRequest{
		ApiService: a,
		ctx: ctx,
	}
}

// Execute executes the request
//  @return BffclusterManagementv1beta1ListClustersResponse
func (a *ClusterServiceAPIService) ClusterServiceListClustersExecute(r ApiClusterServiceListClustersRequest) (*BffclusterManagementv1beta1ListClustersResponse, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodGet
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *BffclusterManagementv1beta1ListClustersResponse
	)

	localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "ClusterServiceAPIService.ClusterServiceListClusters")
	if err != nil {
		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
	}

	localVarPath := localBasePath + "/api/v2023/clusterManagement/v1beta1/clusters"

	localVarHeaderParams := make(map[string]string)
	localVarQueryParams := url.Values{}
	localVarFormParams := url.Values{}
	if r.orgId == nil {
		return localVarReturnValue, nil, reportError("orgId is required and must be specified")
	}
	if r.projectId == nil {
		return localVarReturnValue, nil, reportError("projectId is required and must be specified")
	}

	if r.clusterType != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "clusterType", r.clusterType, "", "")
	}
	if r.onlyResourceInsufficient != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "onlyResourceInsufficient", r.onlyResourceInsufficient, "", "")
	}
	if r.name != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "name", r.name, "", "")
	}
	if r.pageSize != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "pageSize", r.pageSize, "", "")
	}
	if r.pageToken != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "pageToken", r.pageToken, "", "")
	}
	if r.skip != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "skip", r.skip, "", "")
	}
	parameterAddToHeaderOrQuery(localVarQueryParams, "orgId", r.orgId, "", "")
	parameterAddToHeaderOrQuery(localVarQueryParams, "projectId", r.projectId, "", "")
	// to determine the Content-Type header
	localVarHTTPContentTypes := []string{}

	// set Content-Type header
	localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
	if localVarHTTPContentType != "" {
		localVarHeaderParams["Content-Type"] = localVarHTTPContentType
	}

	// to determine the Accept header
	localVarHTTPHeaderAccepts := []string{"application/json"}

	// set Accept header
	localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
	if localVarHTTPHeaderAccept != "" {
		localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
	}
	req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, formFiles)
	if err != nil {
		return localVarReturnValue, nil, err
	}

	localVarHTTPResponse, err := a.client.callAPI(req)
	if err != nil || localVarHTTPResponse == nil {
		return localVarReturnValue, localVarHTTPResponse, err
	}

	localVarBody, err := io.ReadAll(localVarHTTPResponse.Body)
	localVarHTTPResponse.Body.Close()
	localVarHTTPResponse.Body = io.NopCloser(bytes.NewBuffer(localVarBody))
	if err != nil {
		return localVarReturnValue, localVarHTTPResponse, err
	}

	if localVarHTTPResponse.StatusCode >= 300 {
		newErr := &GenericOpenAPIError{
			body:  localVarBody,
			error: localVarHTTPResponse.Status,
		}
			var v GooglerpcStatus
			err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
			if err != nil {
				newErr.error = err.Error()
				return localVarReturnValue, localVarHTTPResponse, newErr
			}
					newErr.error = formatErrorMessage(localVarHTTPResponse.Status, &v)
					newErr.model = v
		return localVarReturnValue, localVarHTTPResponse, newErr
	}

	err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
	if err != nil {
		newErr := &GenericOpenAPIError{
			body:  localVarBody,
			error: err.Error(),
		}
		return localVarReturnValue, localVarHTTPResponse, newErr
	}

	return localVarReturnValue, localVarHTTPResponse, nil
}
