/* tslint:disable */
/* eslint-disable */
/**
 * CWMS Data API
 * CWMS REST API for Data Retrieval
 *
 * The version of the OpenAPI document: 2.4.0-2026.3.16
 * 
 *
 * 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 {
    CdaError,
    CdaErrorFromJSON,
    CdaErrorToJSON,
    DeleteMethod,
    DeleteMethodFromJSON,
    DeleteMethodToJSON,
    LookupType,
    LookupTypeFromJSON,
    LookupTypeToJSON,
    PumpType,
    PumpTypeFromJSON,
    PumpTypeToJSON,
    WaterUser,
    WaterUserFromJSON,
    WaterUserToJSON,
    WaterUserContract,
    WaterUserContractFromJSON,
    WaterUserContractToJSON,
} from '../models';

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 projects with office contractTypes with displayValue
     */
    async deleteProjectsWithOfficeContractTypesWithDisplayValueRaw(requestParameters: DeleteProjectsWithOfficeContractTypesWithDisplayValueRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<void>> {
        if (requestParameters.office === null || requestParameters.office === undefined) {
            throw new runtime.RequiredError('office','Required parameter requestParameters.office was null or undefined when calling deleteProjectsWithOfficeContractTypesWithDisplayValue.');
        }

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

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office contractTypes with displayValue
     */
    async deleteProjectsWithOfficeContractTypesWithDisplayValue(requestParameters: DeleteProjectsWithOfficeContractTypesWithDisplayValueRequest, initOverrides?: RequestInit): Promise<void> {
        await this.deleteProjectsWithOfficeContractTypesWithDisplayValueRaw(requestParameters, initOverrides);
    }

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

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

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

        const queryParameters: any = {};

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

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office with projectId waterUser with waterUser
     */
    async deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUser(requestParameters: DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest, initOverrides?: RequestInit): Promise<void> {
        await this.deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRaw(requestParameters, initOverrides);
    }

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

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

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

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

        const queryParameters: any = {};

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

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office with projectId waterUser with waterUser contracts with contractName
     */
    async deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName(requestParameters: DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest, initOverrides?: RequestInit): Promise<void> {
        await this.deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRaw(requestParameters, initOverrides);
    }

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

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

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

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

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

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

        const queryParameters: any = {};

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

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

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office with projectId waterUser with waterUser contracts with contractName pumps with name
     */
    async deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithName(requestParameters: DeleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithNameRequest, initOverrides?: RequestInit): Promise<void> {
        await this.deleteProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNamePumpsWithNameRaw(requestParameters, initOverrides);
    }

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

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office contractTypes
     */
    async getProjectsWithOfficeContractTypes(requestParameters: GetProjectsWithOfficeContractTypesRequest, initOverrides?: RequestInit): Promise<LookupType> {
        const response = await this.getProjectsWithOfficeContractTypesRaw(requestParameters, initOverrides);
        return await response.value();
    }

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

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

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office with projectId waterUser
     */
    async getProjectsWithOfficeWithProjectIdWaterUser(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserRequest, initOverrides?: RequestInit): Promise<WaterUser> {
        const response = await this.getProjectsWithOfficeWithProjectIdWaterUserRaw(requestParameters, initOverrides);
        return await response.value();
    }

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

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

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

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office with projectId waterUser with waterUser
     */
    async getProjectsWithOfficeWithProjectIdWaterUserWithWaterUser(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest, initOverrides?: RequestInit): Promise<WaterUserContract> {
        const response = await this.getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRaw(requestParameters, initOverrides);
        return await response.value();
    }

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

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

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

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office with projectId waterUser with waterUser contracts
     */
    async getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRequest, initOverrides?: RequestInit): Promise<WaterUserContract> {
        const response = await this.getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRaw(requestParameters, initOverrides);
        return await response.value();
    }

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

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

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

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

        const queryParameters: any = {};

        const headerParameters: runtime.HTTPHeaders = {};

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office with projectId waterUser with waterUser contracts with contractName
     */
    async getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName(requestParameters: GetProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest, initOverrides?: RequestInit): Promise<WaterUserContract> {
        const response = await this.getProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRaw(requestParameters, initOverrides);
        return await response.value();
    }

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

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

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

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

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

        const queryParameters: any = {};

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office with projectId waterUser with waterUser
     */
    async patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUser(requestParameters: PatchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRequest, initOverrides?: RequestInit): Promise<void> {
        await this.patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserRaw(requestParameters, initOverrides);
    }

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

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

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

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

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

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

        const queryParameters: any = {};

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office with projectId waterUser with waterUser contracts with contractName
     */
    async patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractName(requestParameters: PatchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRequest, initOverrides?: RequestInit): Promise<void> {
        await this.patchProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsWithContractNameRaw(requestParameters, initOverrides);
    }

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

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

        const queryParameters: any = {};

        if (requestParameters.failIfExists !== undefined) {
            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"] = 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 projects with office contractTypes
     */
    async postProjectsWithOfficeContractTypes(requestParameters: PostProjectsWithOfficeContractTypesRequest, initOverrides?: RequestInit): Promise<void> {
        await this.postProjectsWithOfficeContractTypesRaw(requestParameters, initOverrides);
    }

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

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

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

        const queryParameters: any = {};

        if (requestParameters.failIfExists !== undefined) {
            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"] = 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 projects with office with projectId waterUser
     */
    async postProjectsWithOfficeWithProjectIdWaterUser(requestParameters: PostProjectsWithOfficeWithProjectIdWaterUserRequest, initOverrides?: RequestInit): Promise<void> {
        await this.postProjectsWithOfficeWithProjectIdWaterUserRaw(requestParameters, initOverrides);
    }

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

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

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

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

        const queryParameters: any = {};

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

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        if (this.configuration && this.configuration.apiKey) {
            headerParameters["Authorization"] = 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 projects with office with projectId waterUser with waterUser contracts
     */
    async postProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContracts(requestParameters: PostProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRequest, initOverrides?: RequestInit): Promise<void> {
        await this.postProjectsWithOfficeWithProjectIdWaterUserWithWaterUserContractsRaw(requestParameters, initOverrides);
    }

}
