/* 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,
  GateChange,
  Outlet,
  UnitSystem,
  VirtualOutlet,
} from '../models/index';
import {
    CdaErrorFromJSON,
    CdaErrorToJSON,
    DeleteMethodFromJSON,
    DeleteMethodToJSON,
    GateChangeFromJSON,
    GateChangeToJSON,
    OutletFromJSON,
    OutletToJSON,
    UnitSystemFromJSON,
    UnitSystemToJSON,
    VirtualOutletFromJSON,
    VirtualOutletToJSON,
} from '../models/index';

export interface DeleteProjectsOutletsWithNameRequest {
    name: string;
    office: string;
    method?: DeleteMethod;
}

export interface DeleteProjectsWithOfficeWithProjectIdGateChangesRequest {
    office: string;
    projectId: string;
    begin: string;
    end: string;
    overrideProtection?: boolean;
}

export interface DeleteProjectsWithOfficeWithProjectIdVirtualOutletsWithNameRequest {
    office: string;
    projectId: string;
    name: string;
    method?: DeleteMethod;
}

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

export interface GetProjectsOutletsWithNameRequest {
    name: string;
    office: string;
}

export interface GetProjectsWithOfficeWithProjectIdGateChangesRequest {
    office: string;
    projectId: string;
    begin: string;
    end: string;
    startTimeInclusive?: boolean;
    endTimeInclusive?: boolean;
    unitSystem?: UnitSystem;
    pageSize?: number;
}

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

export interface GetProjectsWithOfficeWithProjectIdVirtualOutletsWithNameRequest {
    office: string;
    projectId: string;
    name: string;
}

export interface PatchProjectsOutletsWithNameRequest {
    name: string;
    name2: string;
    office: string;
}

export interface PostProjectsGateChangesRequest {
    gateChange: Array<GateChange>;
    failIfExists?: boolean;
}

export interface PostProjectsOutletsRequest {
    outlet: Outlet;
    failIfExists?: boolean;
}

export interface PostProjectsVirtualOutletsRequest {
    virtualOutlet: VirtualOutlet;
    failIfExists?: boolean;
}

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

    /**
     * Delete CWMS Outlet
     * Delete cwmsData projects outlets with name
     */
    async deleteProjectsOutletsWithNameRaw(requestParameters: DeleteProjectsOutletsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['name'] == null) {
            throw new runtime.RequiredError(
                'name',
                'Required parameter "name" was null or undefined when calling deleteProjectsOutletsWithName().'
            );
        }

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

        const queryParameters: any = {};

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

        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/outlets/{name}`.replace(`{${"name"}}`, encodeURIComponent(String(requestParameters['name']))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Delete CWMS Outlet
     * Delete cwmsData projects outlets with name
     */
    async deleteProjectsOutletsWithName(requestParameters: DeleteProjectsOutletsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.deleteProjectsOutletsWithNameRaw(requestParameters, initOverrides);
    }

    /**
     * Deletes matching CWMS gate change data for a Reservoir Project.
     * Delete cwmsData projects with office with projectId gateChanges
     */
    async deleteProjectsWithOfficeWithProjectIdGateChangesRaw(requestParameters: DeleteProjectsWithOfficeWithProjectIdGateChangesRequest, 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 deleteProjectsWithOfficeWithProjectIdGateChanges().'
            );
        }

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

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

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

        const queryParameters: any = {};

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

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

        if (requestParameters['overrideProtection'] != null) {
            queryParameters['override-protection'] = requestParameters['overrideProtection'];
        }

        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}/gate-changes`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Deletes matching CWMS gate change data for a Reservoir Project.
     * Delete cwmsData projects with office with projectId gateChanges
     */
    async deleteProjectsWithOfficeWithProjectIdGateChanges(requestParameters: DeleteProjectsWithOfficeWithProjectIdGateChangesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.deleteProjectsWithOfficeWithProjectIdGateChangesRaw(requestParameters, initOverrides);
    }

    /**
     * Delete CWMS Virtual Outlet
     * Delete cwmsData projects with office with projectId virtualOutlets with name
     */
    async deleteProjectsWithOfficeWithProjectIdVirtualOutletsWithNameRaw(requestParameters: DeleteProjectsWithOfficeWithProjectIdVirtualOutletsWithNameRequest, 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 deleteProjectsWithOfficeWithProjectIdVirtualOutletsWithName().'
            );
        }

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

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

        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}/virtual-outlets/{name}`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"name"}}`, encodeURIComponent(String(requestParameters['name']))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Delete CWMS Virtual Outlet
     * Delete cwmsData projects with office with projectId virtualOutlets with name
     */
    async deleteProjectsWithOfficeWithProjectIdVirtualOutletsWithName(requestParameters: DeleteProjectsWithOfficeWithProjectIdVirtualOutletsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.deleteProjectsWithOfficeWithProjectIdVirtualOutletsWithNameRaw(requestParameters, initOverrides);
    }

    /**
     * Returns matching CWMS Outlet Data for a Reservoir Project.
     * Get cwmsData projects outlets
     */
    async getProjectsOutletsRaw(requestParameters: GetProjectsOutletsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<Outlet>>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling getProjectsOutlets().'
            );
        }

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

        const queryParameters: any = {};

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

        if (requestParameters['projectId'] != null) {
            queryParameters['project-id'] = requestParameters['projectId'];
        }

        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/outlets`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Returns matching CWMS Outlet Data for a Reservoir Project.
     * Get cwmsData projects outlets
     */
    async getProjectsOutlets(requestParameters: GetProjectsOutletsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<Outlet>> {
        const response = await this.getProjectsOutletsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Returns CWMS Outlet Data
     * Get cwmsData projects outlets with name
     */
    async getProjectsOutletsWithNameRaw(requestParameters: GetProjectsOutletsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Outlet>> {
        if (requestParameters['name'] == null) {
            throw new runtime.RequiredError(
                'name',
                'Required parameter "name" was null or undefined when calling getProjectsOutletsWithName().'
            );
        }

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

        const queryParameters: any = {};

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

        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/outlets/{name}`.replace(`{${"name"}}`, encodeURIComponent(String(requestParameters['name']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Returns CWMS Outlet Data
     * Get cwmsData projects outlets with name
     */
    async getProjectsOutletsWithName(requestParameters: GetProjectsOutletsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Outlet> {
        const response = await this.getProjectsOutletsWithNameRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Returns matching CWMS gate change data for a Reservoir Project.
     * Get cwmsData projects with office with projectId gateChanges
     */
    async getProjectsWithOfficeWithProjectIdGateChangesRaw(requestParameters: GetProjectsWithOfficeWithProjectIdGateChangesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<GateChange>>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling getProjectsWithOfficeWithProjectIdGateChanges().'
            );
        }

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

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

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

        const queryParameters: any = {};

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

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

        if (requestParameters['startTimeInclusive'] != null) {
            queryParameters['start-time-inclusive'] = requestParameters['startTimeInclusive'];
        }

        if (requestParameters['endTimeInclusive'] != null) {
            queryParameters['end-time-inclusive'] = requestParameters['endTimeInclusive'];
        }

        if (requestParameters['unitSystem'] != null) {
            queryParameters['unit-system'] = requestParameters['unitSystem'];
        }

        if (requestParameters['pageSize'] != null) {
            queryParameters['page-size'] = requestParameters['pageSize'];
        }

        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}/gate-changes`.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) => jsonValue.map(GateChangeFromJSON));
    }

    /**
     * Returns matching CWMS gate change data for a Reservoir Project.
     * Get cwmsData projects with office with projectId gateChanges
     */
    async getProjectsWithOfficeWithProjectIdGateChanges(requestParameters: GetProjectsWithOfficeWithProjectIdGateChangesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<GateChange>> {
        const response = await this.getProjectsWithOfficeWithProjectIdGateChangesRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Returns matching CWMS Virtual Outlet Data for a Reservoir Project.
     * Get cwmsData projects with office with projectId virtualOutlets
     */
    async getProjectsWithOfficeWithProjectIdVirtualOutletsRaw(requestParameters: GetProjectsWithOfficeWithProjectIdVirtualOutletsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Array<VirtualOutlet>>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling getProjectsWithOfficeWithProjectIdVirtualOutlets().'
            );
        }

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

        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}/virtual-outlets`.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) => jsonValue.map(VirtualOutletFromJSON));
    }

    /**
     * Returns matching CWMS Virtual Outlet Data for a Reservoir Project.
     * Get cwmsData projects with office with projectId virtualOutlets
     */
    async getProjectsWithOfficeWithProjectIdVirtualOutlets(requestParameters: GetProjectsWithOfficeWithProjectIdVirtualOutletsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Array<VirtualOutlet>> {
        const response = await this.getProjectsWithOfficeWithProjectIdVirtualOutletsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Returns CWMS Virtual Outlet Data
     * Get cwmsData projects with office with projectId virtualOutlets with name
     */
    async getProjectsWithOfficeWithProjectIdVirtualOutletsWithNameRaw(requestParameters: GetProjectsWithOfficeWithProjectIdVirtualOutletsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<VirtualOutlet>> {
        if (requestParameters['office'] == null) {
            throw new runtime.RequiredError(
                'office',
                'Required parameter "office" was null or undefined when calling getProjectsWithOfficeWithProjectIdVirtualOutletsWithName().'
            );
        }

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

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

        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}/virtual-outlets/{name}`.replace(`{${"office"}}`, encodeURIComponent(String(requestParameters['office']))).replace(`{${"project-id"}}`, encodeURIComponent(String(requestParameters['projectId']))).replace(`{${"name"}}`, encodeURIComponent(String(requestParameters['name']))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Returns CWMS Virtual Outlet Data
     * Get cwmsData projects with office with projectId virtualOutlets with name
     */
    async getProjectsWithOfficeWithProjectIdVirtualOutletsWithName(requestParameters: GetProjectsWithOfficeWithProjectIdVirtualOutletsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<VirtualOutlet> {
        const response = await this.getProjectsWithOfficeWithProjectIdVirtualOutletsWithNameRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Rename CWMS Outlet
     * Patch cwmsData projects outlets with name
     */
    async patchProjectsOutletsWithNameRaw(requestParameters: PatchProjectsOutletsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['name'] == null) {
            throw new runtime.RequiredError(
                'name',
                'Required parameter "name" was null or undefined when calling patchProjectsOutletsWithName().'
            );
        }

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

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

        const queryParameters: any = {};

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

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

        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/outlets/{name}`.replace(`{${"name"}}`, encodeURIComponent(String(requestParameters['name']))),
            method: 'PATCH',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Rename CWMS Outlet
     * Patch cwmsData projects outlets with name
     */
    async patchProjectsOutletsWithName(requestParameters: PatchProjectsOutletsWithNameRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.patchProjectsOutletsWithNameRaw(requestParameters, initOverrides);
    }

    /**
     * Create CWMS Gate Changes
     * Post cwmsData projects gateChanges
     */
    async postProjectsGateChangesRaw(requestParameters: PostProjectsGateChangesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['gateChange'] == null) {
            throw new runtime.RequiredError(
                'gateChange',
                'Required parameter "gateChange" was null or undefined when calling postProjectsGateChanges().'
            );
        }

        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/gate-changes`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: requestParameters['gateChange']!.map(GateChangeToJSON),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Create CWMS Gate Changes
     * Post cwmsData projects gateChanges
     */
    async postProjectsGateChanges(requestParameters: PostProjectsGateChangesRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.postProjectsGateChangesRaw(requestParameters, initOverrides);
    }

    /**
     * Create CWMS Outlet
     * Post cwmsData projects outlets
     */
    async postProjectsOutletsRaw(requestParameters: PostProjectsOutletsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['outlet'] == null) {
            throw new runtime.RequiredError(
                'outlet',
                'Required parameter "outlet" was null or undefined when calling postProjectsOutlets().'
            );
        }

        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/outlets`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: OutletToJSON(requestParameters['outlet']),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Create CWMS Outlet
     * Post cwmsData projects outlets
     */
    async postProjectsOutlets(requestParameters: PostProjectsOutletsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.postProjectsOutletsRaw(requestParameters, initOverrides);
    }

    /**
     * Create CWMS Virtual Outlet
     * Post cwmsData projects virtualOutlets
     */
    async postProjectsVirtualOutletsRaw(requestParameters: PostProjectsVirtualOutletsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<void>> {
        if (requestParameters['virtualOutlet'] == null) {
            throw new runtime.RequiredError(
                'virtualOutlet',
                'Required parameter "virtualOutlet" was null or undefined when calling postProjectsVirtualOutlets().'
            );
        }

        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/virtual-outlets`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: VirtualOutletToJSON(requestParameters['virtualOutlet']),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Create CWMS Virtual Outlet
     * Post cwmsData projects virtualOutlets
     */
    async postProjectsVirtualOutlets(requestParameters: PostProjectsVirtualOutletsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<void> {
        await this.postProjectsVirtualOutletsRaw(requestParameters, initOverrides);
    }

}
