/**
 * iCure Data Stack API Documentation
 * The iCure Data Stack Application API is the native interface to iCure. This version is obsolete, please use v2.
 *
 * OpenAPI spec version: v1
 *
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */
import { XHR } from './XHR';
import { DocIdentifier } from '../model/DocIdentifier';
import { Topic, TopicRole } from '../model/Topic';
import { ListOfIds } from '../model/ListOfIds';
import { AuthenticationProvider } from '../../icc-x-api/auth/AuthenticationProvider';
import { EntityBulkShareResult } from '../model/requests/EntityBulkShareResult';
import { FilterChainTopic } from '../model/FilterChainTopic';
import { PaginatedListTopic } from '../model/PaginatedListTopic';
import { AbstractFilterTopic } from '../model/AbstractFilterTopic';
import { TimingInfo } from '../model/TimingInfo';
import { BulkShareOrUpdateMetadataParams } from '../model/requests/BulkShareOrUpdateMetadataParams';
export declare class IccTopicApi {
    host: string;
    _headers: Array<XHR.Header>;
    authenticationProvider: AuthenticationProvider;
    fetchImpl?: (input: RequestInfo, init?: RequestInit) => Promise<Response>;
    get headers(): Promise<Array<XHR.Header>>;
    constructor(host: string, headers: any, authenticationProvider?: AuthenticationProvider, fetchImpl?: (input: RequestInfo, init?: RequestInit) => Promise<Response>);
    setHeaders(h: Array<XHR.Header>): void;
    handleError(e: XHR.XHRError): never;
    /**
     *
     * @summary Gets a topic
     * @param topicId
     */
    getTopic(topicId: string): Promise<Topic>;
    /**
     * Keys must be delimited by coma
     * @summary Get a list of topics by ids
     * @param body
     */
    getTopics(body: ListOfIds): Promise<Array<Topic>>;
    /**
     * Returns an instance of created topic.
     * @summary Create a topic with the current user
     * @param body
     */
    createTopic(body: Topic): Promise<Topic>;
    /**
     * Returns the modified topic.
     * @summary Modify a topic
     * @param body
     */
    modifyTopic(body: Topic): Promise<Topic>;
    /**
     * @summary Deletes a topic by id.
     *
     * @param topicId the id of the topic to delete
     * @return a Promise that will resolve in the DocIdentifier of the deleted topic.
     */
    deleteTopic(topicId: string): Promise<DocIdentifier>;
    /**
     * Response is a set containing the ID's of deleted topics.
     * @summary Delete topics.
     * @param body
     */
    deleteTopics(body: ListOfIds): Promise<Array<DocIdentifier>>;
    /**
     * @internal this method is for internal use only and may be changed without notice
     */
    bulkShareTopics(request: BulkShareOrUpdateMetadataParams): Promise<EntityBulkShareResult<Topic>[]>;
    /**
     * Returns a list of topics along with next start keys and Document ID. If the nextStartKey is Null it means that this is the last page.
     * @summary List topics for the current user (HcParty) or the given hcparty in the filter
     * @param body
     * @param startDocumentId A Topic document ID
     * @param limit Number of rows
     * @param collectTiming if true, include server-side filter timing information in the response
     */
    filterTopicsBy(body: FilterChainTopic, startDocumentId?: string, limit?: number, collectTiming?: false): Promise<PaginatedListTopic>;
    filterTopicsBy(body: FilterChainTopic, startDocumentId?: string, limit?: number, collectTiming?: true): Promise<PaginatedListTopic & TimingInfo>;
    /**
     *
     * @summary Get ids of topics matching the provided filter for the current user (HcParty)
     * @param body
     * @param collectTiming if true, include server-side filter timing information in the response
     */
    matchTopicsBy(body: AbstractFilterTopic, collectTiming?: false): Promise<Array<string>>;
    matchTopicsBy(body: AbstractFilterTopic, collectTiming?: true): Promise<Array<string> & TimingInfo>;
    addParticipant(body: {
        dataOwnerId: string;
        topicRole: TopicRole;
    }, topicId: string): Promise<Topic>;
    removeParticipant(body: {
        dataOwnerId: string;
    }, topicId: string): Promise<Topic>;
}
