import FamilySource from './glyph/familySource.js';
import type { Glyph } from './glyph/familySource.js';
import type { GlyphMetadata } from 'workers/source/glyphSource.js';
import type { IDGen } from './process.spec.js';
import type { ImageSourceMetadata } from 'workers/source/imageSource.js';
import type { S2CellId } from 'gis-tools/index.js';
/** Glyph Request Tracker */
export interface GlyphRequestTracker {
    glyphFamilyCount: number;
    processed: number;
    self: {
        promise?: Promise<void>;
    };
    resolve: () => void;
}
/** Map of Glyph/Icon Sources, their requests and their resolves */
export declare class MapGlyphSource extends Map<string, FamilySource> {
    /** resolve mechanic to ensure the glyph/icon source is built */
    resolve: (value: void | PromiseLike<void>) => void;
    ready: Promise<void>;
    glyphRequestTracker: Map<string, GlyphRequestTracker>;
    /**
     * Get a glyph/icon family or list of glyph/icon families
     * @param family - the name(s) of the glyph/icon family
     * @returns the glyph/icon family(ies)
     */
    getFamily(family: string | string[]): undefined | FamilySource | FamilySource[];
}
/**
 * Image Store
 *
 * Manages the Glyph/Icon sources, Sprites, and Images (like fill pattern images)
 */
export default class ImageStore {
    glyphSources: Map<string, MapGlyphSource>;
    idGen: IDGen;
    sourceWorker: MessagePort;
    /**
     * Setup the image store
     * @param idGen - id generator
     * @param sourceWorker - the source worker to send requests to
     */
    setup(idGen: IDGen, sourceWorker: MessagePort): void;
    /**
     * Setup a glyph/icon source
     * @param mapID - the id of the map to setup the glyph/icon source for
     */
    setupMap(mapID: string): void;
    /**
     * Wait for the glyph/icon source to be ready
     * @param mapID - the id of the map to await the glyph/icon source for
     */
    getReady(mapID: string): Promise<void>;
    /**
     * Get the glyph/icon source
     * @param mapID - the id of the map to get the glyph/icon source for
     * @returns the glyph/icon source
     */
    getGlyphSource(mapID: string): MapGlyphSource;
    /**
     * Get a glyph/icon family
     * @param mapID - the id of the map to get the glyph/icon source for
     * @param family - the name of the glyph/icon family
     * @returns the glyph/icon family
     */
    getFamilyMap(mapID: string, family: string): FamilySource;
    /**
     * Parse specific ligatures
     * @param mapID - the id of the map
     * @param families - the name(s) of the glyph/icon family
     * @param glyphs - the ligature codes
     */
    parseLigatures(mapID: string, families: string[], glyphs: string[]): void;
    /**
     * Add missing glyphs
     * @param mapID - the id of the map
     * @param tileID - the id of the tile
     * @param glyphCodes - the codes of the glyphs
     * @param families - the name(s) of the glyph/icon family
     * @returns true if there are missing glyphs
     */
    addMissingGlyph(mapID: string, tileID: S2CellId, glyphCodes: string[], families: string[]): boolean;
    /**
     * Process metadata for a collection of glyph/icon/sprite/image metadatas
     * NOTE: This function is called from the source thread ONLY ONCE per mapID before anything is processed
     * @param mapID - the id of the map to process the metadatas for
     * @param glyphMetadata - the glyph/icon metadatas
     * @param imageMetadata - the sprite/image metadatas
     */
    processMetadata(mapID: string, glyphMetadata: GlyphMetadata[], imageMetadata: ImageSourceMetadata[]): void;
    /**
     * Process missing data
     * @param mapID - the id of the map to process the missing data for
     * @param tileID - the id of the tile that has missing data
     * @param sourceName - the name of the source that has missing data
     */
    processMissingData(mapID: string, tileID: S2CellId, sourceName: string): Promise<void>;
    /**
     * Process a response from the source thread
     * @param mapID - the id of the map
     * @param reqID - the id of the request
     * @param glyphMetadata - the glyph metadata
     * @param familyName - the name of the family
     */
    processGlyphResponse(mapID: string, reqID: string, glyphMetadata: Glyph[], familyName: string): void;
    /**
     * a response from the sourceThread for glyph data
     * @param mapID - the id of the map to process the response for
     * @param familyName - the name of the family
     * @param glyphs - the glyphs to import
     */
    importGlyphs(mapID: string, familyName: string, glyphs: Glyph[]): void;
    /**
     * Get an image pattern (used by fills)
     * @param mapID - the id of the map
     * @param familyName - the name of the family
     * @param name - the name of the pattern
     * @returns the pattern guide
     */
    getPattern(mapID: string, familyName: string, name?: string): Glyph;
}
