/*
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"
)


// MaintenanceServiceAPIService MaintenanceServiceAPI service
type MaintenanceServiceAPIService service

type ApiMaintenanceServiceDeferMaintenanceTaskRequest struct {
	ctx context.Context
	ApiService *MaintenanceServiceAPIService
	maintenanceTaskId string
	orgId *string
	projectId *string
}

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

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

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

/*
MaintenanceServiceDeferMaintenanceTask Defer a maintenance task

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

// Execute executes the request
//  @return map[string]interface{}
func (a *MaintenanceServiceAPIService) MaintenanceServiceDeferMaintenanceTaskExecute(r ApiMaintenanceServiceDeferMaintenanceTaskRequest) (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, "MaintenanceServiceAPIService.MaintenanceServiceDeferMaintenanceTask")
	if err != nil {
		return localVarReturnValue, nil, &GenericOpenAPIError{error: err.Error()}
	}

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/maintenanceTasks/{maintenanceTaskId}:deferMaintenanceTask"
	localVarPath = strings.Replace(localVarPath, "{"+"maintenanceTaskId"+"}", url.PathEscape(parameterValueToString(r.maintenanceTaskId, "maintenanceTaskId")), -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 ApiMaintenanceServiceGetMaintenanceTaskRequest struct {
	ctx context.Context
	ApiService *MaintenanceServiceAPIService
	maintenanceTaskId string
	orgId *string
	projectId *string
}

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

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

func (r ApiMaintenanceServiceGetMaintenanceTaskRequest) Execute() (*V1beta1MaintenanceTask, *http.Response, error) {
	return r.ApiService.MaintenanceServiceGetMaintenanceTaskExecute(r)
}

/*
MaintenanceServiceGetMaintenanceTask Get a maintenance task

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

// Execute executes the request
//  @return V1beta1MaintenanceTask
func (a *MaintenanceServiceAPIService) MaintenanceServiceGetMaintenanceTaskExecute(r ApiMaintenanceServiceGetMaintenanceTaskRequest) (*V1beta1MaintenanceTask, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodGet
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *V1beta1MaintenanceTask
	)

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/maintenanceTasks/{maintenanceTaskId}"
	localVarPath = strings.Replace(localVarPath, "{"+"maintenanceTaskId"+"}", url.PathEscape(parameterValueToString(r.maintenanceTaskId, "maintenanceTaskId")), -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 ApiMaintenanceServiceGetMaintenanceWindowRequest struct {
	ctx context.Context
	ApiService *MaintenanceServiceAPIService
	maintenanceWindowId string
	orgId *string
	projectId *string
}

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

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

func (r ApiMaintenanceServiceGetMaintenanceWindowRequest) Execute() (*Dedicatedv1beta1MaintenanceWindow, *http.Response, error) {
	return r.ApiService.MaintenanceServiceGetMaintenanceWindowExecute(r)
}

/*
MaintenanceServiceGetMaintenanceWindow Get a maintenance window

 @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
 @param maintenanceWindowId Format: project-{project_id}
 @return ApiMaintenanceServiceGetMaintenanceWindowRequest
*/
func (a *MaintenanceServiceAPIService) MaintenanceServiceGetMaintenanceWindow(ctx context.Context, maintenanceWindowId string) ApiMaintenanceServiceGetMaintenanceWindowRequest {
	return ApiMaintenanceServiceGetMaintenanceWindowRequest{
		ApiService: a,
		ctx: ctx,
		maintenanceWindowId: maintenanceWindowId,
	}
}

// Execute executes the request
//  @return Dedicatedv1beta1MaintenanceWindow
func (a *MaintenanceServiceAPIService) MaintenanceServiceGetMaintenanceWindowExecute(r ApiMaintenanceServiceGetMaintenanceWindowRequest) (*Dedicatedv1beta1MaintenanceWindow, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodGet
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *Dedicatedv1beta1MaintenanceWindow
	)

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/maintenanceWindows/{maintenanceWindowId}"
	localVarPath = strings.Replace(localVarPath, "{"+"maintenanceWindowId"+"}", url.PathEscape(parameterValueToString(r.maintenanceWindowId, "maintenanceWindowId")), -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 ApiMaintenanceServiceListMaintenanceTasksRequest struct {
	ctx context.Context
	ApiService *MaintenanceServiceAPIService
	orgId *string
	projectId *string
	pageSize *int32
	pageToken *string
	skip *int32
}

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

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

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

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

func (r ApiMaintenanceServiceListMaintenanceTasksRequest) Execute() (*V1beta1ListMaintenanceTasksResponse, *http.Response, error) {
	return r.ApiService.MaintenanceServiceListMaintenanceTasksExecute(r)
}

/*
MaintenanceServiceListMaintenanceTasks List maintenance tasks

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

// Execute executes the request
//  @return V1beta1ListMaintenanceTasksResponse
func (a *MaintenanceServiceAPIService) MaintenanceServiceListMaintenanceTasksExecute(r ApiMaintenanceServiceListMaintenanceTasksRequest) (*V1beta1ListMaintenanceTasksResponse, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodGet
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *V1beta1ListMaintenanceTasksResponse
	)

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/maintenanceTasks"

	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.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 ApiMaintenanceServiceListMaintenanceWindowsRequest struct {
	ctx context.Context
	ApiService *MaintenanceServiceAPIService
	orgId *string
	projectId *string
	pageSize *int32
	pageToken *string
	skip *int32
}

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

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

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

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

func (r ApiMaintenanceServiceListMaintenanceWindowsRequest) Execute() (*V1beta1ListMaintenanceWindowsResponse, *http.Response, error) {
	return r.ApiService.MaintenanceServiceListMaintenanceWindowsExecute(r)
}

/*
MaintenanceServiceListMaintenanceWindows List maintenance windows

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

// Execute executes the request
//  @return V1beta1ListMaintenanceWindowsResponse
func (a *MaintenanceServiceAPIService) MaintenanceServiceListMaintenanceWindowsExecute(r ApiMaintenanceServiceListMaintenanceWindowsRequest) (*V1beta1ListMaintenanceWindowsResponse, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodGet
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *V1beta1ListMaintenanceWindowsResponse
	)

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/maintenanceWindows"

	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.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 ApiMaintenanceServiceUpdateMaintenanceWindowRequest struct {
	ctx context.Context
	ApiService *MaintenanceServiceAPIService
	maintenanceWindowMaintenanceWindowId string
	orgId *string
	projectId *string
	maintenanceWindow *MaintenanceServiceUpdateMaintenanceWindowRequest
}

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

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

func (r ApiMaintenanceServiceUpdateMaintenanceWindowRequest) MaintenanceWindow(maintenanceWindow MaintenanceServiceUpdateMaintenanceWindowRequest) ApiMaintenanceServiceUpdateMaintenanceWindowRequest {
	r.maintenanceWindow = &maintenanceWindow
	return r
}

func (r ApiMaintenanceServiceUpdateMaintenanceWindowRequest) Execute() (*Dedicatedv1beta1MaintenanceWindow, *http.Response, error) {
	return r.ApiService.MaintenanceServiceUpdateMaintenanceWindowExecute(r)
}

/*
MaintenanceServiceUpdateMaintenanceWindow Update a maintenance window

 @param ctx context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
 @param maintenanceWindowMaintenanceWindowId Format: project-{project_id}
 @return ApiMaintenanceServiceUpdateMaintenanceWindowRequest
*/
func (a *MaintenanceServiceAPIService) MaintenanceServiceUpdateMaintenanceWindow(ctx context.Context, maintenanceWindowMaintenanceWindowId string) ApiMaintenanceServiceUpdateMaintenanceWindowRequest {
	return ApiMaintenanceServiceUpdateMaintenanceWindowRequest{
		ApiService: a,
		ctx: ctx,
		maintenanceWindowMaintenanceWindowId: maintenanceWindowMaintenanceWindowId,
	}
}

// Execute executes the request
//  @return Dedicatedv1beta1MaintenanceWindow
func (a *MaintenanceServiceAPIService) MaintenanceServiceUpdateMaintenanceWindowExecute(r ApiMaintenanceServiceUpdateMaintenanceWindowRequest) (*Dedicatedv1beta1MaintenanceWindow, *http.Response, error) {
	var (
		localVarHTTPMethod   = http.MethodPatch
		localVarPostBody     interface{}
		formFiles            []formFile
		localVarReturnValue  *Dedicatedv1beta1MaintenanceWindow
	)

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

	localVarPath := localBasePath + "/api/v2023/dedicated/v1beta1/maintenanceWindows/{maintenanceWindow.maintenanceWindowId}"
	localVarPath = strings.Replace(localVarPath, "{"+"maintenanceWindow.maintenanceWindowId"+"}", url.PathEscape(parameterValueToString(r.maintenanceWindowMaintenanceWindowId, "maintenanceWindowMaintenanceWindowId")), -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.maintenanceWindow == nil {
		return localVarReturnValue, nil, reportError("maintenanceWindow 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.maintenanceWindow
	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
}
