import { ICAO } from "../index.js";
import { Aerodrome } from "../waypoint.js";
import RepositoryBase from "../repository.js";
/**
 * AerodromeService class provides methods to manage and retrieve aerodrome data.
 *
 * @class AerodromeService
 * @property {Map<ICAO, Aerodrome>} aerodromes - A map of ICAO codes to Aerodrome objects.
 * @property {RepositoryBase<Aerodrome>} [repository] - Optional repository for fetching aerodrome data.
 */
declare class AerodromeService {
    private repository;
    private aerodromes;
    private accessOrder;
    private maxCacheSize;
    /**
     * Creates a new instance of the AerodromeService class.
     *
     * @param repository - An optional repository for fetching aerodrome data.
     * @param maxCacheSize - Maximum number of aerodromes to keep in the cache (default: 1000).
     */
    constructor(repository: RepositoryBase<Aerodrome>, maxCacheSize?: number);
    /**
     * Returns an array of ICAO codes for the aerodromes.
     *
     * @returns An array of ICAO codes.
     */
    keys(): ICAO[];
    /**
     * Returns an array of aerodromes.
     *
     * @returns An array of Aerodrome objects.
     */
    values(): Aerodrome[];
    /**
     * Updates the access order for the LRU cache.
     *
     * @param icao - The ICAO code that was accessed.
     */
    private updateAccessOrder;
    /**
     * Enforces the cache size limit by removing least recently used items.
     */
    private enforceCacheLimit;
    /**
     * Adds aerodromes to the service.
     *
     * @param aerodromes - An array of Aerodrome objects or a single Aerodrome object to add.
     */
    private addToCache;
    /**
     * Finds aerodromes by ICAO code(s).
     *
     * @param icao - A single ICAO code or an array of ICAO codes to search for.
     * @returns A promise that resolves to an array of Aerodrome objects, or undefined if not found.
     * @throws Error if the repository is not set or doesn't support fetchByICAO.
     */
    get(icao: string | string[]): Promise<Aerodrome[] | undefined>;
    /**
     * Finds the nearest aerodrome to the given location.
     *
     * @param location - The geographical location to find the nearest aerodrome to.
     * @param radius - The search radius in kilometers (default is 100 km).
     * @param exclude - An optional array of ICAO codes to exclude from the search.
     * @returns A promise that resolves to the nearest aerodrome, or undefined if not found.
     * @throws Error if no aerodromes are available and the repository doesn't support radius search.
     */
    nearest(location: GeoJSON.Position, radius?: number, exclude?: string[]): Promise<Aerodrome | undefined>;
}
export default AerodromeService;
