/* 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,
  Pool,
  Pools,
} from '../models/index';
import {
    CdaErrorFromJSON,
    CdaErrorToJSON,
    PoolFromJSON,
    PoolToJSON,
    PoolsFromJSON,
    PoolsToJSON,
} from '../models/index';

export interface GetPoolsRequest {
    office?: string;
    idMask?: string;
    nameMask?: string;
    bottomMask?: string;
    topMask?: string;
    includeExplicit?: string;
    includeImplicit?: string;
    page?: string;
    pageSize?: number;
}

export interface GetPoolsWithPoolIdRequest {
    poolId: string;
    office: string;
    projectId: string;
    bottomMask?: string;
    topMask?: string;
    includeExplicit?: string;
    includeImplicit?: string;
}

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

    /**
     * Returns Pools Data
     * Get cwmsData pools
     */
    async getPoolsRaw(requestParameters: GetPoolsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Pools>> {
        const queryParameters: any = {};

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

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

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

        if (requestParameters['bottomMask'] != null) {
            queryParameters['bottom-mask'] = requestParameters['bottomMask'];
        }

        if (requestParameters['topMask'] != null) {
            queryParameters['top-mask'] = requestParameters['topMask'];
        }

        if (requestParameters['includeExplicit'] != null) {
            queryParameters['include-explicit'] = requestParameters['includeExplicit'];
        }

        if (requestParameters['includeImplicit'] != null) {
            queryParameters['include-implicit'] = requestParameters['includeImplicit'];
        }

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

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

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

    /**
     * Returns Pools Data
     * Get cwmsData pools
     */
    async getPools(requestParameters: GetPoolsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Pools> {
        const response = await this.getPoolsRaw(requestParameters, initOverrides);
        return await response.value();
    }

    /**
     * Retrieves requested Pool
     * Get cwmsData pools with poolId
     */
    async getPoolsWithPoolIdRaw(requestParameters: GetPoolsWithPoolIdRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<runtime.ApiResponse<Pool>> {
        if (requestParameters['poolId'] == null) {
            throw new runtime.RequiredError(
                'poolId',
                'Required parameter "poolId" was null or undefined when calling getPoolsWithPoolId().'
            );
        }

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

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

        const queryParameters: any = {};

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

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

        if (requestParameters['bottomMask'] != null) {
            queryParameters['bottom-mask'] = requestParameters['bottomMask'];
        }

        if (requestParameters['topMask'] != null) {
            queryParameters['top-mask'] = requestParameters['topMask'];
        }

        if (requestParameters['includeExplicit'] != null) {
            queryParameters['include-explicit'] = requestParameters['includeExplicit'];
        }

        if (requestParameters['includeImplicit'] != null) {
            queryParameters['include-implicit'] = requestParameters['includeImplicit'];
        }

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

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

    /**
     * Retrieves requested Pool
     * Get cwmsData pools with poolId
     */
    async getPoolsWithPoolId(requestParameters: GetPoolsWithPoolIdRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise<Pool> {
        const response = await this.getPoolsWithPoolIdRaw(requestParameters, initOverrides);
        return await response.value();
    }

}
