import { IConfigManager, IFlagshipConfig } from '../config/index';
import { IHit, NewVisitor, primitive, VisitorCacheDTO, FlagDTO, IFSFlagMetadata, sdkInitialData, VisitorCacheStatus, FlagsStatus, SerializedFlagMetadata, CampaignDTO, VisitorVariations, EAIScore } from '../types';
import { IVisitor } from './IVisitor';
import { FSSdkStatus } from '../enum/index';
import { type HitAbstract } from '../hit/HitAbstract';
import { StrategyAbstract } from './StrategyAbstract';
import { EventEmitter } from '../depsNode.native';
import { MurmurHash } from '../utils/MurmurHash';
import { type Troubleshooting } from '../hit/Troubleshooting';
import { IFSFlag } from '../flag/IFSFlag';
import { GetFlagMetadataParam, GetFlagValueParam, IVisitorProfileCache, VisitorExposedParam } from '../type.local';
import { IFSFlagCollection } from '../flag/IFSFlagCollection';
import { IEmotionAI } from '../emotionAI/IEmotionAI';
import { IVisitorEvent } from '../emotionAI/hit/IVisitorEvent';
import { IPageView } from '../emotionAI/hit/IPageView';
import { type UsageHit } from '../hit/UsageHit';
export declare abstract class VisitorAbstract extends EventEmitter implements IVisitor {
    protected _visitorId: string;
    protected _context: Record<string, primitive>;
    protected _flags: Map<string, FlagDTO>;
    protected _configManager: IConfigManager;
    protected _campaigns: CampaignDTO[];
    protected _hasConsented: boolean;
    protected _anonymousId: string | null;
    deDuplicationCache: Record<string, number>;
    protected _isCleaningDeDuplicationCache: boolean;
    visitorCache?: VisitorCacheDTO;
    protected _exposedVariations: Record<string, VisitorVariations>;
    protected _sendExposedVariationTimeoutId?: NodeJS.Timeout;
    private _instanceId;
    private _traffic;
    protected _sdkInitialData?: sdkInitialData;
    private _consentHitTroubleshooting?;
    private _segmentHitTroubleshooting?;
    private _fetchStatus;
    private _onFetchFlagsStatusChanged?;
    private _getCampaignsPromise?;
    private _hasContextBeenUpdated;
    private _emotionAi;
    private _analyticTraffic;
    private _murmurHash;
    private _visitorProfileCache?;
    get hasContextBeenUpdated(): boolean;
    set hasContextBeenUpdated(v: boolean);
    get getCampaignsPromise(): Promise<CampaignDTO[] | null> | undefined;
    set getCampaignsPromise(v: Promise<CampaignDTO[] | null> | undefined);
    get onFetchFlagsStatusChanged(): (({ status, reason }: FlagsStatus) => void) | undefined;
    set onFetchFlagsStatusChanged(v: (({ status, reason }: FlagsStatus) => void) | undefined);
    get fetchStatus(): FlagsStatus;
    set fetchStatus(v: FlagsStatus);
    get segmentHitTroubleshooting(): Troubleshooting | undefined;
    set segmentHitTroubleshooting(v: Troubleshooting | undefined);
    get consentHitTroubleshooting(): Troubleshooting | undefined;
    set consentHitTroubleshooting(v: Troubleshooting | undefined);
    get sdkInitialData(): sdkInitialData | undefined;
    static SdkStatus?: FSSdkStatus;
    getSdkStatus(): FSSdkStatus | undefined;
    lastFetchFlagsTimestamp: number;
    private _visitorCacheStatus?;
    get visitorCacheStatus(): VisitorCacheStatus | undefined;
    set visitorCacheStatus(v: VisitorCacheStatus | undefined);
    get emotionAi(): IEmotionAI;
    get analyticTraffic(): number;
    constructor(param: NewVisitor & {
        visitorId?: string;
        configManager: IConfigManager;
        context: Record<string, primitive>;
        monitoringData?: sdkInitialData;
        emotionAi: IEmotionAI;
        murmurHash?: MurmurHash;
        visitorProfileCache?: IVisitorProfileCache;
    });
    protected updateCache(): void;
    get traffic(): number;
    set traffic(v: number);
    get instanceId(): string;
    getCurrentDateTime(): Date;
    protected initAnalyticTraffic(): void;
    protected generateVisitorId(): string;
    clearDeDuplicationCache(deDuplicationTime: number): void;
    protected setInitialFlags(flags?: SerializedFlagMetadata[]): void;
    protected setInitializeCampaigns(campaigns?: CampaignDTO[], hasInitialFlags?: boolean): void;
    loadPredefinedContext(): void;
    get visitorId(): string;
    set visitorId(v: string);
    get hasConsented(): boolean;
    set hasConsented(v: boolean);
    setConsent(hasConsented: boolean): void;
    get context(): Record<string, primitive>;
    set context(v: Record<string, primitive>);
    get flagsData(): Map<string, FlagDTO>;
    set flagsData(v: Map<string, FlagDTO>);
    get configManager(): IConfigManager;
    get config(): IFlagshipConfig;
    get campaigns(): CampaignDTO[];
    set campaigns(v: CampaignDTO[]);
    get anonymousId(): string | null;
    set anonymousId(v: string | null);
    protected getStrategy(): StrategyAbstract;
    sendExposedVariation(flag?: FlagDTO): Promise<void>;
    collectEAIEventsAsync(currentPage?: Omit<IPageView, 'toApiKeys'>): Promise<void>;
    sendEaiVisitorEvent(event: IVisitorEvent): void;
    sendEaiPageView(pageView: IPageView): void;
    onEAICollectStatusChange(callback: (status: boolean) => void): void;
    cleanup(): void;
    getCachedEAIScore(): Promise<EAIScore | undefined>;
    isEAIDataCollected(): Promise<boolean>;
    setCachedEAIScore(eAIScore: EAIScore): Promise<void>;
    setIsEAIDataCollected(isEAIDataCollected: boolean): Promise<void>;
    sendTroubleshooting(hit: Troubleshooting): Promise<void>;
    sendUsageHit(hit: UsageHit): Promise<void>;
    addInTrackingManager(hit: HitAbstract): Promise<void>;
    abstract updateContext(key: string, value: primitive): void;
    abstract updateContext(context: Record<string, primitive>): void;
    abstract updateContext(context: Record<string, primitive> | string, value?: primitive): void;
    abstract clearContext(): void;
    abstract getFlag(key: string): IFSFlag;
    abstract getFlags(): IFSFlagCollection;
    abstract sendHit(hit: HitAbstract): Promise<void>;
    abstract sendHit(hit: IHit): Promise<void>;
    abstract sendHit(hit: IHit | HitAbstract): Promise<void>;
    abstract sendHits(hit: HitAbstract[]): Promise<void>;
    abstract sendHits(hit: IHit[]): Promise<void>;
    abstract sendHits(hit: HitAbstract[] | IHit[]): Promise<void>;
    abstract authenticate(visitorId: string): void;
    abstract unauthenticate(): void;
    abstract visitorExposed(param: VisitorExposedParam): Promise<void>;
    abstract getFlagValue<T>(param: GetFlagValueParam<T>): T extends null ? unknown : T;
    abstract fetchFlags(): Promise<void>;
    abstract getFlagMetadata(param: GetFlagMetadataParam): IFSFlagMetadata;
}
