import express from 'express';
import { PluginProperty } from '../../';
import { AudienceSegmentExternalFeedResource, AudienceSegmentResource } from '../../api/core/audiencesegment/AudienceSegmentInterface';
import { BatchUpdatePluginResponse, BatchUpdateRequest } from '../../api/core/batchupdate/BatchUpdateInterface';
import { RealmFilter, UserAgentIdentifierRealmSelectionResource } from '../../api/core/webdomain/UserAgentIdentifierRealmSelectionInterface';
import { BatchedUserSegmentUpdatePluginResponse, ExternalSegmentAuthenticationResponse, ExternalSegmentAuthenticationStatusQueryResponse, ExternalSegmentConnectionPluginResponse, ExternalSegmentCreationPluginResponse, ExternalSegmentDynamicPropertyValuesQueryResponse, ExternalSegmentLogoutResponse, ExternalSegmentTroubleshootResponse, UserSegmentUpdatePluginResponse } from '../../api/plugin/audiencefeedconnector/AudienceFeedConnectorPluginResponseInterface';
import { AudienceFeedBatchContext, ExternalSegmentAuthenticationRequest, ExternalSegmentAuthenticationStatusQueryRequest, ExternalSegmentConnectionRequest, ExternalSegmentCreationRequest, ExternalSegmentDynamicPropertyValuesQueryRequest, ExternalSegmentLogoutRequest, ExternalSegmentTroubleshootRequest, UserSegmentUpdateRequest } from '../../api/plugin/audiencefeedconnector/AudienceFeedConnectorRequestInterface';
import { BasePlugin, PropertiesWrapper } from '../common';
export interface AudienceFeedConnectorBaseInstanceContext {
    feed: AudienceSegmentExternalFeedResource;
    feedProperties: PropertiesWrapper;
}
declare abstract class GenericAudienceFeedConnectorBasePlugin<T, R extends BatchedUserSegmentUpdatePluginResponse<T> | UserSegmentUpdatePluginResponse> extends BasePlugin<AudienceFeedConnectorBaseInstanceContext> {
    constructor(enableThrottling?: boolean);
    fetchAudienceSegment(feedId: string): Promise<AudienceSegmentResource>;
    fetchUserAgentIdentifierRealms(datamartId: string): Promise<Array<UserAgentIdentifierRealmSelectionResource>>;
    checkUserAgentIdentifierRealm(datamartId: string, realmFilter: RealmFilter): Promise<void>;
    fetchAudienceFeed(feedId: string): Promise<AudienceSegmentExternalFeedResource>;
    fetchAudienceFeedProperties(feedId: string): Promise<PluginProperty[]>;
    createAudienceFeedProperties(feedId: string, property: PluginProperty): Promise<PluginProperty[]>;
    updateAudienceFeedProperties(feedId: string, property: PluginProperty): Promise<PluginProperty[]>;
    protected instanceContextBuilder(feedId: string): Promise<AudienceFeedConnectorBaseInstanceContext>;
    protected abstract onExternalSegmentCreation(request: ExternalSegmentCreationRequest, instanceContext: AudienceFeedConnectorBaseInstanceContext): Promise<ExternalSegmentCreationPluginResponse>;
    protected abstract onExternalSegmentConnection(request: ExternalSegmentConnectionRequest, instanceContext: AudienceFeedConnectorBaseInstanceContext): Promise<ExternalSegmentConnectionPluginResponse>;
    protected abstract onUserSegmentUpdate(request: UserSegmentUpdateRequest, instanceContext: AudienceFeedConnectorBaseInstanceContext): Promise<R>;
    protected onTroubleshoot(request: ExternalSegmentTroubleshootRequest, instanceContext: AudienceFeedConnectorBaseInstanceContext): Promise<ExternalSegmentTroubleshootResponse>;
    protected onAuthenticationStatusQuery(request: ExternalSegmentAuthenticationStatusQueryRequest): Promise<ExternalSegmentAuthenticationStatusQueryResponse>;
    protected onAuthentication(request: ExternalSegmentAuthenticationRequest): Promise<ExternalSegmentAuthenticationResponse>;
    protected onLogout(request: ExternalSegmentLogoutRequest): Promise<ExternalSegmentLogoutResponse>;
    protected onDynamicPropertyValuesQuery(request: ExternalSegmentDynamicPropertyValuesQueryRequest): Promise<ExternalSegmentDynamicPropertyValuesQueryResponse>;
    protected getInstanceContext(feedId: string, forceRefresh?: boolean): Promise<AudienceFeedConnectorBaseInstanceContext>;
    protected emptyBodyFilter(req: express.Request, res: express.Response, next: express.NextFunction): void;
    private initExternalSegmentCreation;
    private initExternalSegmentConnection;
    private initUserSegmentUpdate;
    private initTroubleshoot;
    private initAuthenticationStatusQuery;
    private initAuthentication;
    private initLogoutQuery;
    private initDynamicPropertyValuesQuery;
}
export declare abstract class BatchedAudienceFeedConnectorBasePlugin<T> extends GenericAudienceFeedConnectorBasePlugin<T, BatchedUserSegmentUpdatePluginResponse<T>> {
    constructor(enableThrottling?: boolean);
    protected abstract onBatchUpdate(request: BatchUpdateRequest<AudienceFeedBatchContext, T>, instanceContext: AudienceFeedConnectorBaseInstanceContext): Promise<BatchUpdatePluginResponse>;
}
export declare abstract class AudienceFeedConnectorBasePlugin extends GenericAudienceFeedConnectorBasePlugin<void, UserSegmentUpdatePluginResponse> {
    constructor(enableThrottling?: boolean);
    private initBatchUpdate;
}
export {};
