/*
TiDB Cloud Dedicated Open API

TiDB Cloud Dedicated Open 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 ApiClusterServiceCreateClusterRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	orgId *string
	projectId *string
	cluster *TidbCloudOpenApidedicatedv1beta1Cluster
	validateOnly *bool
}

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

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

func (r ApiClusterServiceCreateClusterRequest) Cluster(cluster TidbCloudOpenApidedicatedv1beta1Cluster) ApiClusterServiceCreateClusterRequest {
	r.cluster = &cluster
	return r
}

// if validate_only is true, the request will be validated but not executed.
func (r ApiClusterServiceCreateClusterRequest) ValidateOnly(validateOnly bool) ApiClusterServiceCreateClusterRequest {
	r.validateOnly = &validateOnly
	return r
}

func (r ApiClusterServiceCreateClusterRequest) Execute() (*TidbCloudOpenApidedicatedv1beta1Cluster, *http.Response, error) {
	return r.ApiService.ClusterServiceCreateClusterExecute(r)
}

/*
ClusterServiceCreateCluster Create a cluster

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

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

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

	localVarPath := localBasePath + "/api/v2023/dedicated/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.cluster == nil {
		return localVarReturnValue, nil, reportError("cluster is required and must be specified")
	}

	if r.validateOnly != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "validateOnly", r.validateOnly, "")
	}
	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 ApiClusterServiceDeleteClusterRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	clusterId string
	orgId *string
	projectId *string
	validateOnly *bool
}

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

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

// if validate_only is true, the request will be validated but not executed.
func (r ApiClusterServiceDeleteClusterRequest) ValidateOnly(validateOnly bool) ApiClusterServiceDeleteClusterRequest {
	r.validateOnly = &validateOnly
	return r
}

func (r ApiClusterServiceDeleteClusterRequest) Execute() (*TidbCloudOpenApidedicatedv1beta1Cluster, *http.Response, error) {
	return r.ApiService.ClusterServiceDeleteClusterExecute(r)
}

/*
ClusterServiceDeleteCluster Delete a cluster

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

// Execute executes the request
//  @return TidbCloudOpenApidedicatedv1beta1Cluster
func (a *ClusterServiceAPIService) ClusterServiceDeleteClusterExecute(r ApiClusterServiceDeleteClusterRequest) (*TidbCloudOpenApidedicatedv1beta1Cluster, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodDelete
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *TidbCloudOpenApidedicatedv1beta1Cluster
	)

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

	localVarPath := localBasePath + "/api/v2023/dedicated/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")
	}

	if r.validateOnly != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "validateOnly", r.validateOnly, "")
	}
	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 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() (*TidbCloudOpenApidedicatedv1beta1Cluster, *http.Response, error) {
	return r.ApiService.ClusterServiceGetClusterExecute(r)
}

/*
ClusterServiceGetCluster Get a cluster

 @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 TidbCloudOpenApidedicatedv1beta1Cluster
func (a *ClusterServiceAPIService) ClusterServiceGetClusterExecute(r ApiClusterServiceGetClusterRequest) (*TidbCloudOpenApidedicatedv1beta1Cluster, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodGet
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *TidbCloudOpenApidedicatedv1beta1Cluster
	)

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

	localVarPath := localBasePath + "/api/v2023/dedicated/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 ApiClusterServiceGetNodeInstanceRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	clusterId string
	instanceId string
	orgId *string
	projectId *string
}

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

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

func (r ApiClusterServiceGetNodeInstanceRequest) Execute() (*V1beta1NodeInstance, *http.Response, error) {
	return r.ApiService.ClusterServiceGetNodeInstanceExecute(r)
}

/*
ClusterServiceGetNodeInstance Get a node instance

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

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

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/clusters/{clusterId}/nodeInstances/{instanceId}"
	localVarPath = strings.Replace(localVarPath, "{"+"clusterId"+"}", url.PathEscape(parameterValueToString(r.clusterId, "clusterId")), -1)
	localVarPath = strings.Replace(localVarPath, "{"+"instanceId"+"}", url.PathEscape(parameterValueToString(r.instanceId, "instanceId")), -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
	regionIds *[]string
	clusterStates *[]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 specified, only clusters in the specified regions will be returned.
func (r ApiClusterServiceListClustersRequest) RegionIds(regionIds []string) ApiClusterServiceListClustersRequest {
	r.regionIds = &regionIds
	return r
}

// If specified, only clusters in the specified states will be returned.   - CREATING: Cluster is being created.  - DELETING: Cluster is being deleted.  - ACTIVE: Cluster is active for use.  - RESTORING: Cluster data is being restored.  - MAINTENANCE: Cluster is under maintenance.  - DELETED: Cluster has been deleted.  - INACTIVE: Cluster is not active, but not being deleted.  - UPGRADING: Cluster is being updated. Only for Dedicated Cluster.  - IMPORTING: Cluster is being imported. Only for Dedicated Cluster.  - MODIFYING: Cluster is being modified. Only for Dedicated Cluster.  - PAUSING: Cluster is being paused. Only for Dedicated Cluster.  - PAUSED: Cluster is paused. Only for Dedicated Cluster.  - RESUMING: Cluster is resuming. Only for Dedicated Cluster.
func (r ApiClusterServiceListClustersRequest) ClusterStates(clusterStates []string) ApiClusterServiceListClustersRequest {
	r.clusterStates = &clusterStates
	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() (*TidbCloudOpenApidedicatedv1beta1ListClustersResponse, *http.Response, error) {
	return r.ApiService.ClusterServiceListClustersExecute(r)
}

/*
ClusterServiceListClusters List clusters

 @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 TidbCloudOpenApidedicatedv1beta1ListClustersResponse
func (a *ClusterServiceAPIService) ClusterServiceListClustersExecute(r ApiClusterServiceListClustersRequest) (*TidbCloudOpenApidedicatedv1beta1ListClustersResponse, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodGet
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *TidbCloudOpenApidedicatedv1beta1ListClustersResponse
	)

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

	localVarPath := localBasePath + "/api/v2023/dedicated/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.regionIds != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "regionIds", r.regionIds, "csv")
	}
	if r.clusterStates != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "clusterStates", r.clusterStates, "csv")
	}
	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
}

type ApiClusterServiceListNodeInstancesRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	clusterId string
	orgId *string
	projectId *string
	componentType *string
	pageSize *int32
	pageToken *string
	skip *int32
}

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

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

// If specified, only node instances of the specified component type will be returned.
func (r ApiClusterServiceListNodeInstancesRequest) ComponentType(componentType string) ApiClusterServiceListNodeInstancesRequest {
	r.componentType = &componentType
	return r
}

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

// A page token, received from a previous &#x60;ListNodeInstances&#x60; call. Provide this to retrieve the subsequent page.  When paginating, all other parameters provided to &#x60;ListNodeInstances&#x60; must match the call that provided the page token.
func (r ApiClusterServiceListNodeInstancesRequest) PageToken(pageToken string) ApiClusterServiceListNodeInstancesRequest {
	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 ApiClusterServiceListNodeInstancesRequest) Skip(skip int32) ApiClusterServiceListNodeInstancesRequest {
	r.skip = &skip
	return r
}

func (r ApiClusterServiceListNodeInstancesRequest) Execute() (*V1beta1ListNodeInstancesResponse, *http.Response, error) {
	return r.ApiService.ClusterServiceListNodeInstancesExecute(r)
}

/*
ClusterServiceListNodeInstances List node instances

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

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

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/clusters/{clusterId}/nodeInstances"
	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.componentType != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "componentType", r.componentType, "")
	}
	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
}

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

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

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

func (r ApiClusterServicePauseClusterRequest) Execute() (map[string]interface{}, *http.Response, error) {
	return r.ApiService.ClusterServicePauseClusterExecute(r)
}

/*
ClusterServicePauseCluster Pause a cluster

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

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

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/clusters/{clusterId}:pauseCluster"
	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 ApiClusterServiceResetRootPasswordRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	clusterId string
	orgId *string
	projectId *string
	body *ClusterServiceResetRootPasswordBody
}

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

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

func (r ApiClusterServiceResetRootPasswordRequest) Body(body ClusterServiceResetRootPasswordBody) ApiClusterServiceResetRootPasswordRequest {
	r.body = &body
	return r
}

func (r ApiClusterServiceResetRootPasswordRequest) Execute() (map[string]interface{}, *http.Response, error) {
	return r.ApiService.ClusterServiceResetRootPasswordExecute(r)
}

/*
ClusterServiceResetRootPassword Reset the root password of a cluster

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

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

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/clusters/{clusterId}:resetRootPassword"
	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 ApiClusterServiceResumeClusterRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	clusterId string
	orgId *string
	projectId *string
}

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

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

func (r ApiClusterServiceResumeClusterRequest) Execute() (map[string]interface{}, *http.Response, error) {
	return r.ApiService.ClusterServiceResumeClusterExecute(r)
}

/*
ClusterServiceResumeCluster Resume a cluster

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

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

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/clusters/{clusterId}:resumeCluster"
	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 ApiClusterServiceShowNodeQuotaRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	orgId *string
	projectId *string
}

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

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

func (r ApiClusterServiceShowNodeQuotaRequest) Execute() (*V1beta1ShowNodeQuotaResponse, *http.Response, error) {
	return r.ApiService.ClusterServiceShowNodeQuotaExecute(r)
}

/*
ClusterServiceShowNodeQuota Show node quota across the caller's organization

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

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

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/clusters:showNodeQuota"

	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 ApiClusterServiceUpdateClusterRequest struct {
	ctx context.Context
	ApiService *ClusterServiceAPIService
	clusterId string
	orgId *string
	projectId *string
	cluster *ClusterServiceUpdateClusterRequest
	validateOnly *bool
}

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

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

func (r ApiClusterServiceUpdateClusterRequest) Cluster(cluster ClusterServiceUpdateClusterRequest) ApiClusterServiceUpdateClusterRequest {
	r.cluster = &cluster
	return r
}

// if validate_only is true, the request will be validated but not executed.
func (r ApiClusterServiceUpdateClusterRequest) ValidateOnly(validateOnly bool) ApiClusterServiceUpdateClusterRequest {
	r.validateOnly = &validateOnly
	return r
}

func (r ApiClusterServiceUpdateClusterRequest) Execute() (*TidbCloudOpenApidedicatedv1beta1Cluster, *http.Response, error) {
	return r.ApiService.ClusterServiceUpdateClusterExecute(r)
}

/*
ClusterServiceUpdateCluster Update a cluster

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

// Execute executes the request
//  @return TidbCloudOpenApidedicatedv1beta1Cluster
func (a *ClusterServiceAPIService) ClusterServiceUpdateClusterExecute(r ApiClusterServiceUpdateClusterRequest) (*TidbCloudOpenApidedicatedv1beta1Cluster, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodPatch
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *TidbCloudOpenApidedicatedv1beta1Cluster
	)

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

	localVarPath := localBasePath + "/api/v2023/dedicated/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")
	}
	if r.cluster == nil {
		return localVarReturnValue, nil, reportError("cluster is required and must be specified")
	}

	if r.validateOnly != nil {
		parameterAddToHeaderOrQuery(localVarQueryParams, "validateOnly", r.validateOnly, "")
	}
	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
}
