/**
 * 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 { IccApplicationsettingsApi } from '../icc-api';
import { EncryptedEntityXApi } from './basexapi/EncryptedEntityXApi';
import * as models from '../icc-api/model/models';
import { IccCryptoXApi } from './icc-crypto-x-api';
import { IccDataOwnerXApi } from './icc-data-owner-x-api';
import { SecretIdUseOption } from './crypto/SecretIdUseOption';
import { ShareMetadataBehaviour } from './crypto/ShareMetadataBehaviour';
import { ShareResult } from './utils/ShareResult';
import { ApplicationSettings, SecureDelegation, User } from '../icc-api/model/models';
import AccessLevelEnum = SecureDelegation.AccessLevelEnum;
import { AuthenticationProvider } from './auth/AuthenticationProvider';
import { EntityShareRequest } from '../icc-api/model/requests/EntityShareRequest';
import RequestedPermissionEnum = EntityShareRequest.RequestedPermissionEnum;
import { XHR } from '../icc-api/api/XHR';
export declare class IccApplicationSettingsXApi extends IccApplicationsettingsApi implements EncryptedEntityXApi<models.ApplicationSettings> {
    private readonly autofillAuthor;
    crypto: IccCryptoXApi;
    dataOwnerApi: IccDataOwnerXApi;
    private readonly encryptedFields;
    get headers(): Promise<Array<XHR.Header>>;
    constructor(host: string, headers: {
        [key: string]: string;
    }, crypto: IccCryptoXApi, dataOwnerApi: IccDataOwnerXApi, autofillAuthor: boolean, encryptedKeys?: Array<string>, authenticationProvider?: AuthenticationProvider, fetchImpl?: (input: RequestInfo, init?: RequestInit) => Promise<Response>);
    newInstance(user: models.User, c?: any, options?: {
        additionalDelegates?: {
            [dataOwnerId: string]: AccessLevelEnum;
        };
        sfkOption?: SecretIdUseOption;
        ignoreAutoDelegations?: boolean;
        alternateRootDelegation?: string;
    }): Promise<models.ApplicationSettings>;
    hasWriteAccess(applicationSettings: models.ApplicationSettings): Promise<boolean>;
    shareWith(delegateId: string, applicationSettings: models.ApplicationSettings, options?: {
        requestedPermissions?: RequestedPermissionEnum;
        shareEncryptionKey?: ShareMetadataBehaviour;
    }): Promise<models.ApplicationSettings>;
    shareWithMany(applicationSettings: models.ApplicationSettings, delegates: {
        [delegateId: string]: {
            requestedPermissions?: RequestedPermissionEnum;
            shareEncryptionKey?: ShareMetadataBehaviour;
        };
    }): Promise<models.ApplicationSettings>;
    tryShareWithMany(applicationSettings: models.ApplicationSettings, delegates: {
        [delegateId: string]: {
            requestedPermissions?: RequestedPermissionEnum;
            shareEncryptionKey?: ShareMetadataBehaviour;
        };
    }): Promise<ShareResult<models.ApplicationSettings>>;
    getDataOwnersWithAccessTo(entity: models.ApplicationSettings): Promise<{
        permissionsByDataOwnerId: {
            [p: string]: AccessLevelEnum;
        };
        hasUnknownAnonymousDataOwners: boolean;
    }>;
    getEncryptionKeysOf(entity: models.ApplicationSettings): Promise<string[]>;
    createDelegationDeAnonymizationMetadata(entity: models.ApplicationSettings, delegates: string[]): Promise<void>;
    createApplicationSettings(body?: ApplicationSettings): Promise<never>;
    getApplicationSettings(): Promise<Array<never>>;
    updateApplicationSettings(body?: ApplicationSettings): Promise<never>;
    createApplicationSettingsWithUser(user: User | undefined, body: ApplicationSettings): Promise<ApplicationSettings>;
    getApplicationSettingsWithUser(user: User | undefined): Promise<Array<ApplicationSettings>>;
    updateApplicationSettingsWithUser(user: User | undefined, body: ApplicationSettings): Promise<ApplicationSettings>;
    private tryDecryptOrReturnOriginal;
    private encrypt;
}
