import { OnModuleInit } from "@nestjs/common";
import { Observable } from "rxjs";
import { TelescopeConfig } from "../interfaces/telescope-config.interface";
export interface CacheEntry<T = any> {
    key: string;
    value: T;
    timestamp: Date;
    ttl: number;
    accessCount: number;
    lastAccessed: Date;
    size: number;
    tags: string[];
    priority: "low" | "medium" | "high" | "critical";
    version: string;
    metadata: Record<string, any>;
}
export interface CacheConfig {
    enabled: boolean;
    tiers: {
        l1: {
            enabled: boolean;
            type: "memory" | "node-cache";
            maxSize: number;
            ttl: number;
            maxEntries: number;
        };
        l2: {
            enabled: boolean;
            type: "redis" | "memcached";
            host: string;
            port: number;
            ttl: number;
            maxSize: number;
            compression: boolean;
        };
        l3: {
            enabled: boolean;
            type: "database" | "file";
            ttl: number;
            maxSize: number;
        };
    };
    strategies: {
        writePolicy: "write-through" | "write-back" | "write-around";
        readPolicy: "read-through" | "cache-aside" | "refresh-ahead";
        evictionPolicy: "lru" | "lfu" | "fifo" | "random";
        compression: boolean;
        encryption: boolean;
    };
    monitoring: {
        enabled: boolean;
        metricsInterval: number;
        hitRateThreshold: number;
        sizeThreshold: number;
    };
}
export interface CacheMetrics {
    hits: number;
    misses: number;
    hitRate: number;
    totalSize: number;
    entryCount: number;
    evictions: number;
    compressions: number;
    tierMetrics: {
        l1: TierMetrics;
        l2: TierMetrics;
        l3: TierMetrics;
    };
    performance: {
        averageAccessTime: number;
        averageWriteTime: number;
        compressionRatio: number;
    };
}
export interface TierMetrics {
    hits: number;
    misses: number;
    hitRate: number;
    size: number;
    entryCount: number;
    evictions: number;
}
export interface CacheOperation {
    type: "get" | "set" | "delete" | "clear" | "evict";
    key: string;
    tier: "l1" | "l2" | "l3";
    timestamp: Date;
    duration: number;
    success: boolean;
    error: string | undefined;
}
export declare class AdvancedCachingService implements OnModuleInit {
    private readonly telescopeConfig;
    private readonly logger;
    private readonly l1Cache;
    private readonly l2Cache;
    private readonly l3Cache;
    private readonly metrics;
    private readonly operationSubject;
    private readonly metricsSubject;
    private readonly config;
    private readonly accessOrder;
    private readonly tagIndex;
    private monitoringInterval;
    constructor(telescopeConfig: TelescopeConfig);
    onModuleInit(): Promise<void>;
    private getDefaultCacheConfig;
    private initializeMetrics;
    private initializeCaches;
    private initializeL2Cache;
    private initializeL3Cache;
    private startMonitoring;
    get<T>(key: string, options?: {
        tier?: "l1" | "l2" | "l3";
        tags?: string[];
    }): Promise<T | null>;
    set<T>(key: string, value: T, options?: {
        ttl?: number;
        tier?: "l1" | "l2" | "l3";
        tags?: string[];
        priority?: "low" | "medium" | "high" | "critical";
        version?: string;
    }): Promise<void>;
    delete(key: string, options?: {
        tier?: "l1" | "l2" | "l3";
    }): Promise<boolean>;
    invalidateByTags(tags: string[]): Promise<number>;
    clear(tier?: "l1" | "l2" | "l3"): Promise<void>;
    private getFromL1;
    private getFromL2;
    private getFromL3;
    private setInL1;
    private setInL2;
    private setInL3;
    private deleteFromL1;
    private deleteFromL2;
    private deleteFromL3;
    private clearL2Cache;
    private clearL3Cache;
    private writeThrough;
    private writeBack;
    private writeAround;
    private ensureL1Capacity;
    private evictFromL1;
    private findLeastFrequentlyUsed;
    private isExpired;
    private calculateSize;
    private calculateL1Size;
    private updateAccessOrder;
    private removeFromAccessOrder;
    private updateTagIndex;
    private recordOperation;
    private updateMetrics;
    private checkThresholds;
    getMetrics(): CacheMetrics;
    getOperations(): Observable<CacheOperation>;
    getMetricsUpdates(): Observable<CacheMetrics>;
    warmup(keys: string[]): Promise<void>;
    optimize(): Promise<void>;
    private compressLargeEntries;
    shutdown(): Promise<void>;
    private persistWriteBackData;
}
