/* tslint:disable */
/* eslint-disable */
/**
 * CWMS Data API
 * CWMS REST API for Data Retrieval
 *
 * The version of the OpenAPI document: 2.3.2-2025.03.19
 * 
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */


import * as runtime from '../runtime';
import type {
  CdaError,
  DeleteMethod,
  LookupType,
  PumpType,
  WaterUser,
  WaterUserContract,
} from '../models/index';
import {
    CdaErrorFromJSON,
    CdaErrorToJSON,
    DeleteMethodFromJSON,
    DeleteMethodToJSON,
    LookupTypeFromJSON,
    LookupTypeToJSON,
    PumpTypeFromJSON,
    PumpTypeToJSON,
    WaterUserFromJSON,
    WaterUserToJSON,
    WaterUserContractFromJSON,
    WaterUserContractToJSON,
} from '../models/index';

export interface DeleteProjectsWithOfficeContractTypesWithDisplayValueRequest {
    office: string;
    displayValue: string;
}

export interface DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest {
    office: string;
    projectId: string;
    waterUser: string;
    method?: DeleteMethod;
}

export interface DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest {
    office: string;
    projectId: string;
    waterUser: string;
    contractName: string;
    method?: DeleteMethod;
}

export interface DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithNameRequest {
    office: string;
    projectId: string;
    waterUser: string;
    contractName: string;
    name: string;
    pumpType: PumpType;
    deleteAccounting?: boolean;
}

export interface GetProjectsWithOfficeContractTypesRequest {
    office: string;
}

export interface GetProjectsWithOfficeWithProjectIdWaterUserRequest {
    office: string;
    projectId: string;
}

export interface GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest {
    office: string;
    projectId: string;
    waterUser: string;
}

export interface GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRequest {
    office: string;
    projectId: string;
    waterUser: string;
}

export interface GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest {
    office: string;
    projectId: string;
    waterUser: string;
    contractName: string;
}

export interface PatchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest {
    office: string;
    projectId: string;
    waterUser: string;
    name: string;
    waterUser2: WaterUser;
}

export interface PatchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest {
    office: string;
    projectId: string;
    waterUser: string;
    contractName: string;
    contractName2: string;
    waterUserContract: WaterUserContract;
}

export interface PostProjectsWithOfficeContractTypesRequest {
    office: string;
    lookupType: LookupType;
    failIfExists?: boolean;
}

export interface PostProjectsWithOfficeWithProjectIdWaterUserRequest {
    office: string;
    projectId: string;
    waterUser: WaterUser;
    failIfExists?: boolean;
}

export interface PostProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRequest {
    office: string;
    projectId: string;
    waterUser: string;
    waterUserContract: WaterUserContract;
    failIfExists?: boolean;
    ignoreNulls?: boolean;
}

/**
 * 
 */
export class WaterContractsApi extends runtime.BaseAPI {

    /**
     * Delete a water contract type
     * Delete cwmsData projects with office contractTypes with displayValue
     */
    async deleteProjectsWithOfficeContractTypesWithDisplayValueRaw(requestParameters: DeleteProjectsWithOfficeContractTypesWithDisplayValueRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling deleteProjectsWithOfficeContractTypesWithDisplayValue().'
            );
        }

        if (requestParameters['displayValue'] == null) {
            throw new runtime.RequiredError(
                'displayValue',
                'Required parameter "displayValue" was null or undefined when calling deleteProjectsWithOfficeContractTypesWithDisplayValue().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/contract-types/{display-value}`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"display-value"}}`, encodeURIComponent(String(requestParameters['displayValue']))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Delete a water contract type
     * Delete cwmsData projects with office contractTypes with displayValue
     */
    async deleteProjectsWithOfficeContractTypesWithDisplayValue(requestParameters: DeleteProjectsWithOfficeContractTypesWithDisplayValueRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.deleteProjectsWithOfficeContractTypesWithDisplayValueRaw(requestParameters, initOverrides);
    }

    /**
     * Deletes a water user from CWMS.
     * Delete cwmsData projects with office with projectId waterUser with waterUser
     */
    async deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRaw(requestParameters: DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        if (requestParameters['waterUser'] == null) {
            throw new runtime.RequiredError(
                'waterUser',
                'Required parameter "waterUser" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['method'] != null) {
            queryParameters['method'] = requestParameters['method'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user/{water-user}`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"water-user"}}`, encodeURIComponent(String(requestParameters['waterUser']))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Deletes a water user from CWMS.
     * Delete cwmsData projects with office with projectId waterUser with waterUser
     */
    async deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUser(requestParameters: DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRaw(requestParameters, initOverrides);
    }

    /**
     * Delete a specified water contract
     * Delete cwmsData projects with office with projectId waterUser with waterUser contracts with contractName
     */
    async deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRaw(requestParameters: DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['waterUser'] == null) {
            throw new runtime.RequiredError(
                'waterUser',
                'Required parameter "waterUser" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['contractName'] == null) {
            throw new runtime.RequiredError(
                'contractName',
                'Required parameter "contractName" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['method'] != null) {
            queryParameters['method'] = requestParameters['method'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user/{water-user}/contracts/{contract-name}`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"water-user"}}`, encodeURIComponent(String(requestParameters['waterUser']))).replace(`{${"contract-name"}}`, encodeURIComponent(String(requestParameters['contractName']))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Delete a specified water contract
     * Delete cwmsData projects with office with projectId waterUser with waterUser contracts with contractName
     */
    async deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName(requestParameters: DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRaw(requestParameters, initOverrides);
    }

    /**
     * Disassociate a pump from a contract
     * Delete cwmsData projects with office with projectId waterUser with waterUser contracts with contractName pumps with name
     */
    async deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithNameRaw(requestParameters: DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithName().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithName().'
            );
        }

        if (requestParameters['waterUser'] == null) {
            throw new runtime.RequiredError(
                'waterUser',
                'Required parameter "waterUser" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithName().'
            );
        }

        if (requestParameters['contractName'] == null) {
            throw new runtime.RequiredError(
                'contractName',
                'Required parameter "contractName" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithName().'
            );
        }

        if (requestParameters['name'] == null) {
            throw new runtime.RequiredError(
                'name',
                'Required parameter "name" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithName().'
            );
        }

        if (requestParameters['pumpType'] == null) {
            throw new runtime.RequiredError(
                'pumpType',
                'Required parameter "pumpType" was null or undefined when calling deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithName().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['pumpType'] != null) {
            queryParameters['pump-type'] = requestParameters['pumpType'];
        }

        if (requestParameters['deleteAccounting'] != null) {
            queryParameters['delete-accounting'] = requestParameters['deleteAccounting'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user/{water-user}/contracts/{contract-name}/pumps/{name}`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"water-user"}}`, encodeURIComponent(String(requestParameters['waterUser']))).replace(`{${"contract-name"}}`, encodeURIComponent(String(requestParameters['contractName']))).replace(`{${"name"}}`, encodeURIComponent(String(requestParameters['name']))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Disassociate a pump from a contract
     * Delete cwmsData projects with office with projectId waterUser with waterUser contracts with contractName pumps with name
     */
    async deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithName(requestParameters: DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithNameRaw(requestParameters, initOverrides);
    }

    /**
     * Get all water contract types
     * Get cwmsData projects with office contractTypes
     */
    async getProjectsWithOfficeContractTypesRaw(requestParameters: GetProjectsWithOfficeContractTypesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<LookupType>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling getProjectsWithOfficeContractTypes().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/contract-types`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => LookupTypeFromJSON(jsonValue));
    }

    /**
     * Get all water contract types
     * Get cwmsData projects with office contractTypes
     */
    async getProjectsWithOfficeContractTypes(requestParameters: GetProjectsWithOfficeContractTypesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<LookupType> {
        const response = await this.getProjectsWithOfficeContractTypesRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Gets all water users.
     * Get cwmsData projects with office with projectId waterUser
     */
    async getProjectsWithOfficeWithProjectIdWaterUserRaw(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<WaterUser>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUser().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUser().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => WaterUserFromJSON(jsonValue));
    }

    /**
     * Gets all water users.
     * Get cwmsData projects with office with projectId waterUser
     */
    async getProjectsWithOfficeWithProjectIdWaterUser(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<WaterUser> {
        const response = await this.getProjectsWithOfficeWithProjectIdWaterUserRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Gets a specified water user.
     * Get cwmsData projects with office with projectId waterUser with waterUser
     */
    async getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRaw(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<WaterUserContract>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        if (requestParameters['waterUser'] == null) {
            throw new runtime.RequiredError(
                'waterUser',
                'Required parameter "waterUser" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user/{water-user}`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"water-user"}}`, encodeURIComponent(String(requestParameters['waterUser']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => WaterUserContractFromJSON(jsonValue));
    }

    /**
     * Gets a specified water user.
     * Get cwmsData projects with office with projectId waterUser with waterUser
     */
    async getProjectsWithOfficeWithProjectIdWaterUserWithWaterUser(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<WaterUserContract> {
        const response = await this.getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Return all water contracts
     * Get cwmsData projects with office with projectId waterUser with waterUser contracts
     */
    async getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRaw(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<WaterUserContract>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts().'
            );
        }

        if (requestParameters['waterUser'] == null) {
            throw new runtime.RequiredError(
                'waterUser',
                'Required parameter "waterUser" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user/{water-user}/contracts`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"water-user"}}`, encodeURIComponent(String(requestParameters['waterUser']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => WaterUserContractFromJSON(jsonValue));
    }

    /**
     * Return all water contracts
     * Get cwmsData projects with office with projectId waterUser with waterUser contracts
     */
    async getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<WaterUserContract> {
        const response = await this.getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Return a specified water contract
     * Get cwmsData projects with office with projectId waterUser with waterUser contracts with contractName
     */
    async getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRaw(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<WaterUserContract>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['waterUser'] == null) {
            throw new runtime.RequiredError(
                'waterUser',
                'Required parameter "waterUser" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['contractName'] == null) {
            throw new runtime.RequiredError(
                'contractName',
                'Required parameter "contractName" was null or undefined when calling getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user/{water-user}/contracts/{contract-name}`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"water-user"}}`, encodeURIComponent(String(requestParameters['waterUser']))).replace(`{${"contract-name"}}`, encodeURIComponent(String(requestParameters['contractName']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.JSONApiResponse(response, (jsonValue) => WaterUserContractFromJSON(jsonValue));
    }

    /**
     * Return a specified water contract
     * Get cwmsData projects with office with projectId waterUser with waterUser contracts with contractName
     */
    async getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<WaterUserContract> {
        const response = await this.getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Updates a water user in CWMS.
     * Patch cwmsData projects with office with projectId waterUser with waterUser
     */
    async patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRaw(requestParameters: PatchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        if (requestParameters['waterUser'] == null) {
            throw new runtime.RequiredError(
                'waterUser',
                'Required parameter "waterUser" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        if (requestParameters['name'] == null) {
            throw new runtime.RequiredError(
                'name',
                'Required parameter "name" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        if (requestParameters['waterUser2'] == null) {
            throw new runtime.RequiredError(
                'waterUser2',
                'Required parameter "waterUser2" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUser().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['name'] != null) {
            queryParameters['name'] = requestParameters['name'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json;version=1';

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user/{water-user}`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"water-user"}}`, encodeURIComponent(String(requestParameters['waterUser']))),
            method: 'PATCH',
            headers: headerParameters,
            query: queryParameters,
            body: WaterUserToJSON(requestParameters['waterUser2']),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Updates a water user in CWMS.
     * Patch cwmsData projects with office with projectId waterUser with waterUser
     */
    async patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUser(requestParameters: PatchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRaw(requestParameters, initOverrides);
    }

    /**
     * Renames a water contract
     * Patch cwmsData projects with office with projectId waterUser with waterUser contracts with contractName
     */
    async patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRaw(requestParameters: PatchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['waterUser'] == null) {
            throw new runtime.RequiredError(
                'waterUser',
                'Required parameter "waterUser" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['contractName'] == null) {
            throw new runtime.RequiredError(
                'contractName',
                'Required parameter "contractName" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['contractName2'] == null) {
            throw new runtime.RequiredError(
                'contractName2',
                'Required parameter "contractName2" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        if (requestParameters['waterUserContract'] == null) {
            throw new runtime.RequiredError(
                'waterUserContract',
                'Required parameter "waterUserContract" was null or undefined when calling patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['contractName2'] != null) {
            queryParameters['contract-name'] = requestParameters['contractName2'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json;version=1';

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user/{water-user}/contracts/{contract-name}`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"water-user"}}`, encodeURIComponent(String(requestParameters['waterUser']))).replace(`{${"contract-name"}}`, encodeURIComponent(String(requestParameters['contractName']))),
            method: 'PATCH',
            headers: headerParameters,
            query: queryParameters,
            body: WaterUserContractToJSON(requestParameters['waterUserContract']),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Renames a water contract
     * Patch cwmsData projects with office with projectId waterUser with waterUser contracts with contractName
     */
    async patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName(requestParameters: PatchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRaw(requestParameters, initOverrides);
    }

    /**
     * Create a new water contract type
     * Post cwmsData projects with office contractTypes
     */
    async postProjectsWithOfficeContractTypesRaw(requestParameters: PostProjectsWithOfficeContractTypesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling postProjectsWithOfficeContractTypes().'
            );
        }

        if (requestParameters['lookupType'] == null) {
            throw new runtime.RequiredError(
                'lookupType',
                'Required parameter "lookupType" was null or undefined when calling postProjectsWithOfficeContractTypes().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['failIfExists'] != null) {
            queryParameters['fail-if-exists'] = requestParameters['failIfExists'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json;version=1';

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/contract-types`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))),
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: LookupTypeToJSON(requestParameters['lookupType']),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Create a new water contract type
     * Post cwmsData projects with office contractTypes
     */
    async postProjectsWithOfficeContractTypes(requestParameters: PostProjectsWithOfficeContractTypesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.postProjectsWithOfficeContractTypesRaw(requestParameters, initOverrides);
    }

    /**
     * Stores a water user to CWMS.
     * Post cwmsData projects with office with projectId waterUser
     */
    async postProjectsWithOfficeWithProjectIdWaterUserRaw(requestParameters: PostProjectsWithOfficeWithProjectIdWaterUserRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling postProjectsWithOfficeWithProjectIdWaterUser().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling postProjectsWithOfficeWithProjectIdWaterUser().'
            );
        }

        if (requestParameters['waterUser'] == null) {
            throw new runtime.RequiredError(
                'waterUser',
                'Required parameter "waterUser" was null or undefined when calling postProjectsWithOfficeWithProjectIdWaterUser().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['failIfExists'] != null) {
            queryParameters['fail-if-exists'] = requestParameters['failIfExists'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json;version=1';

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))),
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: WaterUserToJSON(requestParameters['waterUser']),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Stores a water user to CWMS.
     * Post cwmsData projects with office with projectId waterUser
     */
    async postProjectsWithOfficeWithProjectIdWaterUser(requestParameters: PostProjectsWithOfficeWithProjectIdWaterUserRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.postProjectsWithOfficeWithProjectIdWaterUserRaw(requestParameters, initOverrides);
    }

    /**
     * Create a new water contract
     * Post cwmsData projects with office with projectId waterUser with waterUser contracts
     */
    async postProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRaw(requestParameters: PostProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling postProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts().'
            );
        }

        if (requestParameters['projectId'] == null) {
            throw new runtime.RequiredError(
                'projectId',
                'Required parameter "projectId" was null or undefined when calling postProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts().'
            );
        }

        if (requestParameters['waterUser'] == null) {
            throw new runtime.RequiredError(
                'waterUser',
                'Required parameter "waterUser" was null or undefined when calling postProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts().'
            );
        }

        if (requestParameters['waterUserContract'] == null) {
            throw new runtime.RequiredError(
                'waterUserContract',
                'Required parameter "waterUserContract" was null or undefined when calling postProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts().'
            );
        }

        const queryParameters: any = {};

        if (requestParameters['failIfExists'] != null) {
            queryParameters['fail-if-exists'] = requestParameters['failIfExists'];
        }

        if (requestParameters['ignoreNulls'] != null) {
            queryParameters['ignore-nulls'] = requestParameters['ignoreNulls'];
        }

        const headerParameters: runtime.HTTPHeaders = {};

        headerParameters['Content-Type'] = 'application/json;version=1';

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = await this.configuration.apiKey("Authorization"); // ApiKey authentication
        }

        const response = await this.request({
            path: `/projects/{office}/{project-id}/water-user/{water-user}/contracts`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"water-user"}}`, encodeURIComponent(String(requestParameters['waterUser']))),
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: WaterUserContractToJSON(requestParameters['waterUserContract']),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Create a new water contract
     * Post cwmsData projects with office with projectId waterUser with waterUser contracts
     */
    async postProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts(requestParameters: PostProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.postProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRaw(requestParameters, initOverrides);
    }

}
