import { HttpClient, HttpHeaders, HttpResponse, HttpEvent, HttpParameterCodec, HttpContext } from '@angular/common/http';
import { Observable } from 'rxjs';
import { InstrumentMatch } from '../model/instrumentMatch';
import { InstrumentSearchProperty } from '../model/instrumentSearchProperty';
import { PagedResourceListOfPortfolioGroupSearchResult } from '../model/pagedResourceListOfPortfolioGroupSearchResult';
import { PagedResourceListOfPortfolioSearchResult } from '../model/pagedResourceListOfPortfolioSearchResult';
import { PagedResourceListOfPropertyDefinitionSearchResult } from '../model/pagedResourceListOfPropertyDefinitionSearchResult';
import { Configuration } from '../configuration';
import * as i0 from "@angular/core";
export interface InstrumentsSearchRequestParams {
    /** A collection of instrument properties to search for. LUSID will return instruments for any matched              properties. */
    instrumentSearchProperty: Array<InstrumentSearchProperty>;
    /** The effective datetime or cut label to use when searching mastered instruments. This parameter has no effect on instruments that  have not been mastered within LUSID. Defaults to the current LUSID system datetime if not specified. */
    masteredEffectiveAt?: string;
    /** If set to true, only search over instruments that have been mastered within LUSID. Defaults to false. */
    masteredOnly?: boolean;
    /** The scope in which the instrument lies. */
    scope?: string;
}
export interface SearchPortfolioGroupsRequestParams {
    /** A parameter used for searching any portfolio group field. Wildcards(*) are supported at the end of words (e.g. \&#39;Port*\&#39;). Read more about filtering results from LUSID here https://support.lusid.com/filtering-results-from-lusid. */
    search?: string;
    /** Expression to filter the result set.   For example, to filter on the Scope, use \&quot;id.scope eq \&#39;string\&#39;\&quot;  Read more about filtering results from LUSID here https://support.lusid.com/filtering-results-from-lusid. */
    filter?: string;
    /** Order the results by these fields. Use use the \&#39;-\&#39; sign to denote descending order e.g. -MyFieldName. Multiple fields can be denoted by a comma e.g. -MyFieldName,AnotherFieldName,-AFurtherFieldName */
    sortBy?: string;
    /** When paginating, only return this number of records */
    limit?: number;
    /** Encoded page string returned from a previous search result that will retrieve the next page of data. When this field is supplied, filter, sortBy and search fields should not be supplied. */
    page?: string;
}
export interface SearchPortfoliosRequestParams {
    /** A parameter used for searching any portfolio field. Wildcards(*) are supported at the end of words (e.g. \&#39;Port*\&#39;). Read more about filtering results from LUSID here https://support.lusid.com/filtering-results-from-lusid. */
    search?: string;
    /** Expression to filter the result set.   For example, to filter on the portfolio Type, use \&quot;type eq \&#39;Transaction\&#39;\&quot;  Read more about filtering results from LUSID here https://support.lusid.com/filtering-results-from-lusid. */
    filter?: string;
    /** Order the results by these fields. Use use the \&#39;-\&#39; sign to denote descending order e.g. -MyFieldName. Multiple fields can be denoted by a comma e.g. -MyFieldName,AnotherFieldName,-AFurtherFieldName */
    sortBy?: string;
    /** When paginating, only return this number of records */
    limit?: number;
    /** Encoded page string returned from a previous search result that will retrieve the next page of data. When this field is supplied, filter, sortBy and search fields should not be supplied. */
    page?: string;
}
export interface SearchPropertiesRequestParams {
    /** A parameter used for searching any field. Wildcards(*) are supported at the end of words (e.g. \&#39;Port*\&#39;). Read more about filtering results from LUSID here https://support.lusid.com/filtering-results-from-lusid. */
    search?: string;
    /** Expression to filter the result set.   For example, to filter on the Value Type, use \&quot;valueType eq \&#39;string\&#39;\&quot;  Read more about filtering results from LUSID here https://support.lusid.com/filtering-results-from-lusid. */
    filter?: string;
    /** Order the results by these fields. Use use the \&#39;-\&#39; sign to denote descending order e.g. -MyFieldName. Multiple fields can be denoted by a comma e.g. -MyFieldName,AnotherFieldName,-AFurtherFieldName */
    sortBy?: string;
    /** When paginating, only return this number of records */
    limit?: number;
    /** Encoded page string returned from a previous search result that will retrieve the next page of data. When this field is supplied, filter, sortBy and search fields should not be supplied. */
    page?: string;
}
export declare class SearchService {
    protected httpClient: HttpClient;
    protected basePath: string;
    defaultHeaders: HttpHeaders;
    configuration: Configuration;
    encoder: HttpParameterCodec;
    constructor(httpClient: HttpClient, basePath: string | string[], configuration: Configuration);
    private addToHttpParams;
    private addToHttpParamsRecursive;
    /**
     * [EARLY ACCESS] InstrumentsSearch: Instruments search
     * Search across all instruments that have been mastered in LUSID. Optionally augment the results with instruments from an external symbology service,  currently OpenFIGI.
     * @param requestParameters
     * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param reportProgress flag to report request and response progress.
     */
    instrumentsSearch(requestParameters?: InstrumentsSearchRequestParams, observe?: 'body', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<Array<InstrumentMatch>>;
    instrumentsSearch(requestParameters?: InstrumentsSearchRequestParams, observe?: 'response', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpResponse<Array<InstrumentMatch>>>;
    instrumentsSearch(requestParameters?: InstrumentsSearchRequestParams, observe?: 'events', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpEvent<Array<InstrumentMatch>>>;
    /**
     * SearchPortfolioGroups: Search Portfolio Groups
     * Search through all portfolio groups
     * @param requestParameters
     * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param reportProgress flag to report request and response progress.
     */
    searchPortfolioGroups(requestParameters?: SearchPortfolioGroupsRequestParams, observe?: 'body', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<PagedResourceListOfPortfolioGroupSearchResult>;
    searchPortfolioGroups(requestParameters?: SearchPortfolioGroupsRequestParams, observe?: 'response', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpResponse<PagedResourceListOfPortfolioGroupSearchResult>>;
    searchPortfolioGroups(requestParameters?: SearchPortfolioGroupsRequestParams, observe?: 'events', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpEvent<PagedResourceListOfPortfolioGroupSearchResult>>;
    /**
     * SearchPortfolios: Search Portfolios
     * Search through all portfolios
     * @param requestParameters
     * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param reportProgress flag to report request and response progress.
     */
    searchPortfolios(requestParameters?: SearchPortfoliosRequestParams, observe?: 'body', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<PagedResourceListOfPortfolioSearchResult>;
    searchPortfolios(requestParameters?: SearchPortfoliosRequestParams, observe?: 'response', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpResponse<PagedResourceListOfPortfolioSearchResult>>;
    searchPortfolios(requestParameters?: SearchPortfoliosRequestParams, observe?: 'events', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpEvent<PagedResourceListOfPortfolioSearchResult>>;
    /**
     * SearchProperties: Search Property Definitions
     * Search through all Property Definitions
     * @param requestParameters
     * @param observe set whether or not to return the data Observable as the body, response or events. defaults to returning the body.
     * @param reportProgress flag to report request and response progress.
     */
    searchProperties(requestParameters?: SearchPropertiesRequestParams, observe?: 'body', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<PagedResourceListOfPropertyDefinitionSearchResult>;
    searchProperties(requestParameters?: SearchPropertiesRequestParams, observe?: 'response', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpResponse<PagedResourceListOfPropertyDefinitionSearchResult>>;
    searchProperties(requestParameters?: SearchPropertiesRequestParams, observe?: 'events', reportProgress?: boolean, options?: {
        httpHeaderAccept?: 'text/plain' | 'application/json' | 'text/json';
        context?: HttpContext;
        transferCache?: boolean;
    }): Observable<HttpEvent<PagedResourceListOfPropertyDefinitionSearchResult>>;
    static ɵfac: i0.ɵɵFactoryDeclaration<SearchService, [null, { optional: true; }, { optional: true; }]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<SearchService>;
}
