/**
 * LRU cache for player records with auto-save on eviction.
 * Prevents unbounded memory growth by evicting inactive players.
 * Ported from Python player_cache.py
 */
import { Player } from '../models/Player.js';
export interface CacheStats {
    size: number;
    max_size: number;
    connected: number;
    disconnected: number;
    memory_mb: number;
    utilization: number;
}
export type OnEvictCallback = (player: Player) => void | Promise<void>;
export type SavePlayerCallback = (player: Player) => void | Promise<void>;
/**
 * LRU cache for player records.
 *
 * Features:
 * - Automatic eviction of least-recently-used players
 * - Never evicts connected players
 * - Auto-save on eviction (optional)
 * - Memory usage tracking
 *
 * Usage:
 *   const cache = new PlayerCache(100);
 *   cache.set("user123", player);
 *   const player = cache.get("user123");
 */
export declare class PlayerCache {
    private cache;
    private maxSize;
    private autoSave;
    private savePlayer;
    onEvict: OnEvictCallback | null;
    /**
     * Initialize player cache.
     *
     * @param maxSize - Maximum number of players to keep in memory
     * @param autoSave - Whether to auto-save evicted players
     */
    constructor(maxSize?: number, autoSave?: boolean);
    /**
     * Set the save player callback for auto-save functionality.
     */
    setSavePlayerCallback(callback: SavePlayerCallback): void;
    /**
     * Get player from cache (marks as recently used).
     */
    get(userId: string): Player | null;
    /**
     * Add player to cache.
     */
    set(userId: string, player: Player): void;
    /**
     * Remove player from cache.
     */
    remove(userId: string): boolean;
    /**
     * Check if player is in cache.
     */
    has(userId: string): boolean;
    /**
     * Evict least recently used player (unless connected).
     */
    private evictLru;
    /**
     * Get current cache size.
     */
    size(): number;
    /**
     * Check if cache is full.
     */
    isFull(): boolean;
    /**
     * Get all cached player IDs.
     */
    keys(): string[];
    /**
     * Get all cached players.
     */
    values(): Player[];
    /**
     * Iterate over all players.
     */
    forEach(callback: (player: Player, userId: string) => void): void;
    /**
     * Estimate memory usage of cached players.
     */
    estimateMemoryMb(): number;
    /**
     * Get cache statistics.
     */
    getStats(): CacheStats;
    /**
     * Clear all cached players.
     */
    clear(): void;
    /**
     * Evict all disconnected players.
     */
    evictDisconnected(): number;
}
export declare function getPlayerCache(maxSize?: number): PlayerCache;
export declare const cache: {
    PlayerCache: typeof PlayerCache;
    getPlayerCache: typeof getPlayerCache;
};
//# sourceMappingURL=player_cache.d.ts.map