/* 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,
    StoreRule,
    StoreRuleFromJSON,
    StoreRuleToJSON,
    TimeSeries,
    TimeSeriesFromJSON,
    TimeSeriesToJSON,
    TimeSeriesProfile,
    TimeSeriesProfileFromJSON,
    TimeSeriesProfileToJSON,
    TimeSeriesProfileInstance,
    TimeSeriesProfileInstanceFromJSON,
    TimeSeriesProfileInstanceToJSON,
    TimeSeriesProfileList,
    TimeSeriesProfileListFromJSON,
    TimeSeriesProfileListToJSON,
    TimeSeriesProfileParser,
    TimeSeriesProfileParserFromJSON,
    TimeSeriesProfileParserToJSON,
    TimeSeriesProfileParserColumnar,
    TimeSeriesProfileParserColumnarFromJSON,
    TimeSeriesProfileParserColumnarToJSON,
    TimeSeriesProfileParserIndexed,
    TimeSeriesProfileParserIndexedFromJSON,
    TimeSeriesProfileParserIndexedToJSON,
    Tsv,
    TsvFromJSON,
    TsvToJSON,
    UnitSystem,
    UnitSystemFromJSON,
    UnitSystemToJSON,
    VerticalDatum,
    VerticalDatumFromJSON,
    VerticalDatumToJSON,
} from '../models';

export interface DeleteTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersionRequest {
    locationId: string;
    parameterId: string;
    version: string;
    office: string;
    versionDate: Date;
    date: Date;
    timezone?: string;
    overrideProtection?: boolean;
}

export interface DeleteTimeSeriesProfileParserWithLocationIdWithParameterIdRequest {
    locationId: string;
    parameterId: string;
    office: string;
}

export interface DeleteTimeSeriesProfileWithLocationIdWithParameterIdRequest {
    locationId: string;
    parameterId: string;
    office?: string;
}

export interface DeleteTimeSeriesWithTimeSeriesRequest {
    timeseries: string;
    office: string;
    begin: string;
    end: string;
    timezone?: string;
    versionDate?: string;
    startTimeInclusive?: boolean;
    endTimeInclusive?: boolean;
    maxVersion?: boolean;
    overrideProtection?: boolean;
}

export interface GetTimeSeriesRequest {
    name: string;
    office?: string;
    unit?: string;
    units?: string;
    versionDate?: string;
    datum?: string;
    begin?: string;
    end?: string;
    timezone?: string;
    trim?: boolean;
    format?: string;
    includeEntryDate?: boolean;
    page?: string;
    pageSize?: number;
}

export interface GetTimeSeriesFilteredRequest {
    name: string;
    office?: string;
    unit?: string;
    versionDate?: string;
    begin?: string;
    end?: string;
    timezone?: string;
    trim?: boolean;
    includeEntryDate?: boolean;
    query?: string;
    page?: string;
    pageSize?: number;
}

export interface GetTimeSeriesProfileRequest {
    officeMask?: string;
    locationMask?: string;
    parameterIdMask?: string;
    page?: string;
    pageSize?: string;
}

export interface GetTimeSeriesProfileInstanceRequest {
    officeMask?: string;
    locationMask?: string;
    parameterIdMask?: string;
    versionMask?: string;
}

export interface GetTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersionRequest {
    locationId: string;
    parameterId: string;
    version: string;
    office: string;
    unit: string;
    start: Date;
    end: Date;
    timezone?: string;
    versionDate?: Date;
    startTimeInclusive?: boolean;
    endTimeInclusive?: boolean;
    previous?: boolean;
    next?: boolean;
    maxVersion?: boolean;
    page?: string;
    pageSize?: number;
}

export interface GetTimeSeriesProfileParserRequest {
    parameterIdMask?: string;
    officeMask?: string;
    locationMask?: string;
}

export interface GetTimeSeriesProfileParserWithLocationIdWithParameterIdRequest {
    locationId: string;
    parameterId: string;
    office: string;
}

export interface GetTimeSeriesProfileWithLocationIdWithParameterIdRequest {
    locationId: string;
    parameterId: string;
    office?: string;
}

export interface GetTimeSeriesRecentRequest {
    office?: string;
    categoryId?: string;
    groupId?: string;
    tsIds?: string;
    unitSystem?: UnitSystem;
}

export interface PatchTimeSeriesWithTimeSeriesRequest {
    timeseries: string;
    timeSeries: TimeSeries;
    timezone?: string;
    createAsLrts?: boolean;
    storeRule?: StoreRule;
    overrideProtection?: boolean;
    datum?: VerticalDatum;
}

export interface PostTimeSeriesRequest {
    timeSeries: TimeSeries;
    timezone?: string;
    createAsLrts?: boolean;
    storeRule?: StoreRule;
    overrideProtection?: boolean;
    datum?: VerticalDatum;
}

export interface PostTimeSeriesProfileRequest {
    failIfExists?: boolean;
    timeSeriesProfile?: TimeSeriesProfile;
}

export interface PostTimeSeriesProfileInstanceRequest {
    versionDate: Date;
    profileData: string;
    version: string;
    method?: StoreRule;
    overrideProtection?: boolean;
    timeSeriesProfile?: TimeSeriesProfile;
}

export interface PostTimeSeriesProfileParserRequest {
    timeSeriesProfileParserIndexed: TimeSeriesProfileParserIndexed;
    failIfExists?: boolean;
}

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

    /**
     * Delete a time series profile instance
     */
    async deleteTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersionRaw(requestParameters: DeleteTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersionRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<void>> {
        if (requestParameters.locationId === null || requestParameters.locationId === undefined) {
            throw new runtime.RequiredError('locationId','Required parameter requestParameters.locationId was null or undefined when calling deleteTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersion.');
        }

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

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

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

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

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

        const queryParameters: any = {};

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

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

        if (requestParameters.versionDate !== undefined) {
            queryParameters['version-date'] = (requestParameters.versionDate as any).toISOString();
        }

        if (requestParameters.date !== undefined) {
            queryParameters['date'] = (requestParameters.date as any).toISOString();
        }

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/profile-instance/{location-id}/{parameter-id}/{version}`.replace(`{${"location-id"}}`, encodeURIComponent(String(requestParameters.locationId))).replace(`{${"parameter-id"}}`, encodeURIComponent(String(requestParameters.parameterId))).replace(`{${"version"}}`, encodeURIComponent(String(requestParameters.version))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Delete a time series profile instance
     */
    async deleteTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersion(requestParameters: DeleteTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersionRequest, initOverrides?: RequestInit): Promise<void> {
        await this.deleteTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersionRaw(requestParameters, initOverrides);
    }

    /**
     * Delete a TimeSeriesProfile Parser by ID
     */
    async deleteTimeSeriesProfileParserWithLocationIdWithParameterIdRaw(requestParameters: DeleteTimeSeriesProfileParserWithLocationIdWithParameterIdRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<void>> {
        if (requestParameters.locationId === null || requestParameters.locationId === undefined) {
            throw new runtime.RequiredError('locationId','Required parameter requestParameters.locationId was null or undefined when calling deleteTimeSeriesProfileParserWithLocationIdWithParameterId.');
        }

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

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

        const queryParameters: any = {};

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/profile-parser/{location-id}/{parameter-id}`.replace(`{${"location-id"}}`, encodeURIComponent(String(requestParameters.locationId))).replace(`{${"parameter-id"}}`, encodeURIComponent(String(requestParameters.parameterId))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Delete a TimeSeriesProfile Parser by ID
     */
    async deleteTimeSeriesProfileParserWithLocationIdWithParameterId(requestParameters: DeleteTimeSeriesProfileParserWithLocationIdWithParameterIdRequest, initOverrides?: RequestInit): Promise<void> {
        await this.deleteTimeSeriesProfileParserWithLocationIdWithParameterIdRaw(requestParameters, initOverrides);
    }

    /**
     * Delete a time series profile
     */
    async deleteTimeSeriesProfileWithLocationIdWithParameterIdRaw(requestParameters: DeleteTimeSeriesProfileWithLocationIdWithParameterIdRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<void>> {
        if (requestParameters.locationId === null || requestParameters.locationId === undefined) {
            throw new runtime.RequiredError('locationId','Required parameter requestParameters.locationId was null or undefined when calling deleteTimeSeriesProfileWithLocationIdWithParameterId.');
        }

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

        const queryParameters: any = {};

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/profile/{location-id}/{parameter-id}`.replace(`{${"location-id"}}`, encodeURIComponent(String(requestParameters.locationId))).replace(`{${"parameter-id"}}`, encodeURIComponent(String(requestParameters.parameterId))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Delete a time series profile
     */
    async deleteTimeSeriesProfileWithLocationIdWithParameterId(requestParameters: DeleteTimeSeriesProfileWithLocationIdWithParameterIdRequest, initOverrides?: RequestInit): Promise<void> {
        await this.deleteTimeSeriesProfileWithLocationIdWithParameterIdRaw(requestParameters, initOverrides);
    }

    /**
     * Delete timeseries with timeseries
     */
    async deleteTimeSeriesWithTimeSeriesRaw(requestParameters: DeleteTimeSeriesWithTimeSeriesRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<void>> {
        if (requestParameters.timeseries === null || requestParameters.timeseries === undefined) {
            throw new runtime.RequiredError('timeseries','Required parameter requestParameters.timeseries was null or undefined when calling deleteTimeSeriesWithTimeSeries.');
        }

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

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

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

        const queryParameters: any = {};

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

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

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

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

        if (requestParameters.versionDate !== undefined) {
            queryParameters['version-date'] = requestParameters.versionDate;
        }

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

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

        if (requestParameters.maxVersion !== undefined) {
            queryParameters['max-version'] = requestParameters.maxVersion;
        }

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/{timeseries}`.replace(`{${"timeseries"}}`, encodeURIComponent(String(requestParameters.timeseries))),
            method: 'DELETE',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Delete timeseries with timeseries
     */
    async deleteTimeSeriesWithTimeSeries(requestParameters: DeleteTimeSeriesWithTimeSeriesRequest, initOverrides?: RequestInit): Promise<void> {
        await this.deleteTimeSeriesWithTimeSeriesRaw(requestParameters, initOverrides);
    }

    /**
     * Get timeseries
     */
    async getTimeSeriesRaw(requestParameters: GetTimeSeriesRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<TimeSeries>> {
        if (requestParameters.name === null || requestParameters.name === undefined) {
            throw new runtime.RequiredError('name','Required parameter requestParameters.name was null or undefined when calling getTimeSeries.');
        }

        const queryParameters: any = {};

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

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

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

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

        if (requestParameters.versionDate !== undefined) {
            queryParameters['version-date'] = requestParameters.versionDate;
        }

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

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

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

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

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

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

        if (requestParameters.includeEntryDate !== undefined) {
            queryParameters['include-entry-date'] = requestParameters.includeEntryDate;
        }

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

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Get timeseries
     */
    async getTimeSeries(requestParameters: GetTimeSeriesRequest, initOverrides?: RequestInit): Promise<TimeSeries> {
        const response = await this.getTimeSeriesRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get timeseries filtered
     */
    async getTimeSeriesFilteredRaw(requestParameters: GetTimeSeriesFilteredRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<TimeSeries>> {
        if (requestParameters.name === null || requestParameters.name === undefined) {
            throw new runtime.RequiredError('name','Required parameter requestParameters.name was null or undefined when calling getTimeSeriesFiltered.');
        }

        const queryParameters: any = {};

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

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

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

        if (requestParameters.versionDate !== undefined) {
            queryParameters['version-date'] = requestParameters.versionDate;
        }

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

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

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

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

        if (requestParameters.includeEntryDate !== undefined) {
            queryParameters['include-entry-date'] = requestParameters.includeEntryDate;
        }

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

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

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/filtered`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Get timeseries filtered
     */
    async getTimeSeriesFiltered(requestParameters: GetTimeSeriesFilteredRequest, initOverrides?: RequestInit): Promise<TimeSeries> {
        const response = await this.getTimeSeriesFilteredRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get a catalog of time series profiles
     */
    async getTimeSeriesProfileRaw(requestParameters: GetTimeSeriesProfileRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<TimeSeriesProfileList>> {
        const queryParameters: any = {};

        if (requestParameters.officeMask !== undefined) {
            queryParameters['office-mask'] = requestParameters.officeMask;
        }

        if (requestParameters.locationMask !== undefined) {
            queryParameters['location-mask'] = requestParameters.locationMask;
        }

        if (requestParameters.parameterIdMask !== undefined) {
            queryParameters['parameter-id-mask'] = requestParameters.parameterIdMask;
        }

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

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/profile`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Get a catalog of time series profiles
     */
    async getTimeSeriesProfile(requestParameters: GetTimeSeriesProfileRequest = {}, initOverrides?: RequestInit): Promise<TimeSeriesProfileList> {
        const response = await this.getTimeSeriesProfileRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get all time series profile instances that match the provided masks. This endpoint will return a list of time series profile instances without the associated data. Data for an instance can be retrieved using the singular retrieval endpoint.
     */
    async getTimeSeriesProfileInstanceRaw(requestParameters: GetTimeSeriesProfileInstanceRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<TimeSeriesProfileInstance>> {
        const queryParameters: any = {};

        if (requestParameters.officeMask !== undefined) {
            queryParameters['office-mask'] = requestParameters.officeMask;
        }

        if (requestParameters.locationMask !== undefined) {
            queryParameters['location-mask'] = requestParameters.locationMask;
        }

        if (requestParameters.parameterIdMask !== undefined) {
            queryParameters['parameter-id-mask'] = requestParameters.parameterIdMask;
        }

        if (requestParameters.versionMask !== undefined) {
            queryParameters['version-mask'] = requestParameters.versionMask;
        }

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/profile-instance`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Get all time series profile instances that match the provided masks. This endpoint will return a list of time series profile instances without the associated data. Data for an instance can be retrieved using the singular retrieval endpoint.
     */
    async getTimeSeriesProfileInstance(requestParameters: GetTimeSeriesProfileInstanceRequest = {}, initOverrides?: RequestInit): Promise<TimeSeriesProfileInstance> {
        const response = await this.getTimeSeriesProfileInstanceRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get a time series profile instance that matches the provided parameters.
     */
    async getTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersionRaw(requestParameters: GetTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersionRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<TimeSeriesProfileInstance>> {
        if (requestParameters.locationId === null || requestParameters.locationId === undefined) {
            throw new runtime.RequiredError('locationId','Required parameter requestParameters.locationId was null or undefined when calling getTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersion.');
        }

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

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

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

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

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

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

        const queryParameters: any = {};

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

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

        if (requestParameters.versionDate !== undefined) {
            queryParameters['version-date'] = (requestParameters.versionDate as any).toISOString();
        }

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

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

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

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

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

        if (requestParameters.maxVersion !== undefined) {
            queryParameters['max-version'] = requestParameters.maxVersion;
        }

        if (requestParameters.start !== undefined) {
            queryParameters['start'] = (requestParameters.start as any).toISOString();
        }

        if (requestParameters.end !== undefined) {
            queryParameters['end'] = (requestParameters.end as any).toISOString();
        }

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

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/profile-instance/{location-id}/{parameter-id}/{version}`.replace(`{${"location-id"}}`, encodeURIComponent(String(requestParameters.locationId))).replace(`{${"parameter-id"}}`, encodeURIComponent(String(requestParameters.parameterId))).replace(`{${"version"}}`, encodeURIComponent(String(requestParameters.version))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Get a time series profile instance that matches the provided parameters.
     */
    async getTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersion(requestParameters: GetTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersionRequest, initOverrides?: RequestInit): Promise<TimeSeriesProfileInstance> {
        const response = await this.getTimeSeriesProfileInstanceWithLocationIdWithParameterIdWithVersionRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Retrieve a list of TimeSeries Profile Parsers that match the provided mask parameters
     */
    async getTimeSeriesProfileParserRaw(requestParameters: GetTimeSeriesProfileParserRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<Array<TimeSeriesProfileParser>>> {
        const queryParameters: any = {};

        if (requestParameters.parameterIdMask !== undefined) {
            queryParameters['parameter-id-mask'] = requestParameters.parameterIdMask;
        }

        if (requestParameters.officeMask !== undefined) {
            queryParameters['office-mask'] = requestParameters.officeMask;
        }

        if (requestParameters.locationMask !== undefined) {
            queryParameters['location-mask'] = requestParameters.locationMask;
        }

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/profile-parser`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Retrieve a list of TimeSeries Profile Parsers that match the provided mask parameters
     */
    async getTimeSeriesProfileParser(requestParameters: GetTimeSeriesProfileParserRequest = {}, initOverrides?: RequestInit): Promise<Array<TimeSeriesProfileParser>> {
        const response = await this.getTimeSeriesProfileParserRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get a TimeSeriesProfile Parser by ID
     */
    async getTimeSeriesProfileParserWithLocationIdWithParameterIdRaw(requestParameters: GetTimeSeriesProfileParserWithLocationIdWithParameterIdRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<TimeSeriesProfileParser>> {
        if (requestParameters.locationId === null || requestParameters.locationId === undefined) {
            throw new runtime.RequiredError('locationId','Required parameter requestParameters.locationId was null or undefined when calling getTimeSeriesProfileParserWithLocationIdWithParameterId.');
        }

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

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

        const queryParameters: any = {};

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/profile-parser/{location-id}/{parameter-id}`.replace(`{${"location-id"}}`, encodeURIComponent(String(requestParameters.locationId))).replace(`{${"parameter-id"}}`, encodeURIComponent(String(requestParameters.parameterId))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Get a TimeSeriesProfile Parser by ID
     */
    async getTimeSeriesProfileParserWithLocationIdWithParameterId(requestParameters: GetTimeSeriesProfileParserWithLocationIdWithParameterIdRequest, initOverrides?: RequestInit): Promise<TimeSeriesProfileParser> {
        const response = await this.getTimeSeriesProfileParserWithLocationIdWithParameterIdRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Get a time series profile
     */
    async getTimeSeriesProfileWithLocationIdWithParameterIdRaw(requestParameters: GetTimeSeriesProfileWithLocationIdWithParameterIdRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<TimeSeriesProfile>> {
        if (requestParameters.locationId === null || requestParameters.locationId === undefined) {
            throw new runtime.RequiredError('locationId','Required parameter requestParameters.locationId was null or undefined when calling getTimeSeriesProfileWithLocationIdWithParameterId.');
        }

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

        const queryParameters: any = {};

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/profile/{location-id}/{parameter-id}`.replace(`{${"location-id"}}`, encodeURIComponent(String(requestParameters.locationId))).replace(`{${"parameter-id"}}`, encodeURIComponent(String(requestParameters.parameterId))),
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Get a time series profile
     */
    async getTimeSeriesProfileWithLocationIdWithParameterId(requestParameters: GetTimeSeriesProfileWithLocationIdWithParameterIdRequest, initOverrides?: RequestInit): Promise<TimeSeriesProfile> {
        const response = await this.getTimeSeriesProfileWithLocationIdWithParameterIdRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Returns CWMS TimeSeries Groups Data
     * Get timeseries recent
     */
    async getTimeSeriesRecentRaw(requestParameters: GetTimeSeriesRecentRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<Array<Tsv>>> {
        const queryParameters: any = {};

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

        if (requestParameters.categoryId !== undefined) {
            queryParameters['category-id'] = requestParameters.categoryId;
        }

        if (requestParameters.groupId !== undefined) {
            queryParameters['group-id'] = requestParameters.groupId;
        }

        if (requestParameters.tsIds !== undefined) {
            queryParameters['ts-ids'] = requestParameters.tsIds;
        }

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

        const headerParameters: runtime.HTTPHeaders = {};

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

        const response = await this.request({
            path: `/timeseries/recent`,
            method: 'GET',
            headers: headerParameters,
            query: queryParameters,
        }, initOverrides);

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

    /**
     * Returns CWMS TimeSeries Groups Data
     * Get timeseries recent
     */
    async getTimeSeriesRecent(requestParameters: GetTimeSeriesRecentRequest = {}, initOverrides?: RequestInit): Promise<Array<Tsv>> {
        const response = await this.getTimeSeriesRecentRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Update a TimeSeries with provided values
     * Patch timeseries with timeseries
     */
    async patchTimeSeriesWithTimeSeriesRaw(requestParameters: PatchTimeSeriesWithTimeSeriesRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<void>> {
        if (requestParameters.timeseries === null || requestParameters.timeseries === undefined) {
            throw new runtime.RequiredError('timeseries','Required parameter requestParameters.timeseries was null or undefined when calling patchTimeSeriesWithTimeSeries.');
        }

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

        const queryParameters: any = {};

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

        if (requestParameters.createAsLrts !== undefined) {
            queryParameters['create-as-lrts'] = requestParameters.createAsLrts;
        }

        if (requestParameters.storeRule !== undefined) {
            queryParameters['store-rule'] = requestParameters.storeRule;
        }

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

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

        const headerParameters: runtime.HTTPHeaders = {};

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

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

        const response = await this.request({
            path: `/timeseries/{timeseries}`.replace(`{${"timeseries"}}`, encodeURIComponent(String(requestParameters.timeseries))),
            method: 'PATCH',
            headers: headerParameters,
            query: queryParameters,
            body: TimeSeriesToJSON(requestParameters.timeSeries),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Update a TimeSeries with provided values
     * Patch timeseries with timeseries
     */
    async patchTimeSeriesWithTimeSeries(requestParameters: PatchTimeSeriesWithTimeSeriesRequest, initOverrides?: RequestInit): Promise<void> {
        await this.patchTimeSeriesWithTimeSeriesRaw(requestParameters, initOverrides);
    }

    /**
     * Used to create and save time-series data. Data to be stored must have time stamps in UTC represented as epoch milliseconds. If data entry date is included in the request, it will be dropped. 
     * Post timeseries
     */
    async postTimeSeriesRaw(requestParameters: PostTimeSeriesRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<void>> {
        if (requestParameters.timeSeries === null || requestParameters.timeSeries === undefined) {
            throw new runtime.RequiredError('timeSeries','Required parameter requestParameters.timeSeries was null or undefined when calling postTimeSeries.');
        }

        const queryParameters: any = {};

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

        if (requestParameters.createAsLrts !== undefined) {
            queryParameters['create-as-lrts'] = requestParameters.createAsLrts;
        }

        if (requestParameters.storeRule !== undefined) {
            queryParameters['store-rule'] = requestParameters.storeRule;
        }

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

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

        const headerParameters: runtime.HTTPHeaders = {};

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

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

        const response = await this.request({
            path: `/timeseries`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: TimeSeriesToJSON(requestParameters.timeSeries),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Used to create and save time-series data. Data to be stored must have time stamps in UTC represented as epoch milliseconds. If data entry date is included in the request, it will be dropped. 
     * Post timeseries
     */
    async postTimeSeries(requestParameters: PostTimeSeriesRequest, initOverrides?: RequestInit): Promise<void> {
        await this.postTimeSeriesRaw(requestParameters, initOverrides);
    }

    /**
     * Create a new time series profile
     */
    async postTimeSeriesProfileRaw(requestParameters: PostTimeSeriesProfileRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<void>> {
        const queryParameters: any = {};

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

        const headerParameters: runtime.HTTPHeaders = {};

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

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

        const response = await this.request({
            path: `/timeseries/profile`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: TimeSeriesProfileToJSON(requestParameters.timeSeriesProfile),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Create a new time series profile
     */
    async postTimeSeriesProfile(requestParameters: PostTimeSeriesProfileRequest = {}, initOverrides?: RequestInit): Promise<void> {
        await this.postTimeSeriesProfileRaw(requestParameters, initOverrides);
    }

    /**
     * Create a new time series profile instance by parsing provided data
     */
    async postTimeSeriesProfileInstanceRaw(requestParameters: PostTimeSeriesProfileInstanceRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<void>> {
        if (requestParameters.versionDate === null || requestParameters.versionDate === undefined) {
            throw new runtime.RequiredError('versionDate','Required parameter requestParameters.versionDate was null or undefined when calling postTimeSeriesProfileInstance.');
        }

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

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

        const queryParameters: any = {};

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

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

        if (requestParameters.versionDate !== undefined) {
            queryParameters['version-date'] = (requestParameters.versionDate as any).toISOString();
        }

        if (requestParameters.profileData !== undefined) {
            queryParameters['profile-data'] = requestParameters.profileData;
        }

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

        const headerParameters: runtime.HTTPHeaders = {};

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

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

        const response = await this.request({
            path: `/timeseries/profile-instance`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: TimeSeriesProfileToJSON(requestParameters.timeSeriesProfile),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Create a new time series profile instance by parsing provided data
     */
    async postTimeSeriesProfileInstance(requestParameters: PostTimeSeriesProfileInstanceRequest, initOverrides?: RequestInit): Promise<void> {
        await this.postTimeSeriesProfileInstanceRaw(requestParameters, initOverrides);
    }

    /**
     * Store a TimeSeriesProfile Parser
     */
    async postTimeSeriesProfileParserRaw(requestParameters: PostTimeSeriesProfileParserRequest, initOverrides?: RequestInit): Promise<runtime.ApiResponse<void>> {
        if (requestParameters.timeSeriesProfileParserIndexed === null || requestParameters.timeSeriesProfileParserIndexed === undefined) {
            throw new runtime.RequiredError('timeSeriesProfileParserIndexed','Required parameter requestParameters.timeSeriesProfileParserIndexed was null or undefined when calling postTimeSeriesProfileParser.');
        }

        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: `/timeseries/profile-parser`,
            method: 'POST',
            headers: headerParameters,
            query: queryParameters,
            body: TimeSeriesProfileParserIndexedToJSON(requestParameters.timeSeriesProfileParserIndexed),
        }, initOverrides);

        return new runtime.VoidApiResponse(response);
    }

    /**
     * Store a TimeSeriesProfile Parser
     */
    async postTimeSeriesProfileParser(requestParameters: PostTimeSeriesProfileParserRequest, initOverrides?: RequestInit): Promise<void> {
        await this.postTimeSeriesProfileParserRaw(requestParameters, initOverrides);
    }

}
